0

java 11

  import java.util.ArrayList;
    import java.util.List;
    
    import static javax.persistence.GenerationType.SEQUENCE;
    
    @Entity
    @Table(name = "client")
    public class Client {
        @Id
        @GeneratedValue(strategy = SEQUENCE, generator="clientId_generator")
        @SequenceGenerator(name = "clientId_generator", sequenceName = "clientId", allocationSize = 1)
        private Long id;
    
        @Column(name = "name")
        private String name;
    
        @OneToMany(mappedBy = "client", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
        private List<AddressDataSet> addresses = new ArrayList<>();
    
        @OneToMany(mappedBy = "client", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
        private List<PhoneDataSet> phones = new ArrayList<>();
    
    }

And this:

@Entity
@Table(name = "address_data_set")
public class AddressDataSet {
    @Id
    @GeneratedValue(strategy = SEQUENCE, generator="addressId_generator")
    @SequenceGenerator(name = "addressId_generator", sequenceName = "addressId", allocationSize = 1)
    private Long id;

    @Column(name = "street")
    private String street;

    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "client_id", nullable = false)
    private Client client;

And this:

   @Entity
    @Table(name = "phone_data_set")
    public class PhoneDataSet {
        @Id
        @GeneratedValue(strategy = SEQUENCE, generator="phoneId_generator")
        @SequenceGenerator(name = "phoneId_generator", sequenceName = "phoneId", allocationSize = 1)
        private Long id;
    
        @Column(name = "number")
        private String number;
    
        @ManyToOne(cascade = CascadeType.ALL)
        @JoinColumn(name = "client_id", nullable = false)
        private Client client;

Try to start:

   private Main() {
      

        var configuration = new Configuration()
                .setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQL10Dialect")
                .setProperty("hibernate.connection.url", URL)
                .setProperty("hibernate.connection.username", USER)
                .setProperty("hibernate.connection.password", PASSWORD)

                .setProperty("hibernate.show_sql", "true")
                .setProperty("hibernate.hbm2ddl.auto", "create-drop") //validate - оптимальный вариант
                .setProperty("hibernate.generate_statistics", "true");

        var serviceRegistry = new StandardServiceRegistryBuilder()
                .applySettings(configuration.getProperties()).build();

        var metadata = new MetadataSources(serviceRegistry)
                .addAnnotatedClass(Client.class)
                .addAnnotatedClass(AddressDataSet.class)
                .addAnnotatedClass(PhoneDataSet.class)
                .getMetadataBuilder()
                .build();

        sessionFactory = metadata.getSessionFactoryBuilder().build();
    }

But I get error:

Exception in thread "main" org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags: [hw10.model.Client.addresses,.hw10.model.Client.phones]
    at org.hibernate.loader.plan.exec.internal.AbstractLoadQueryDetails.generate(AbstractLoadQueryDetails.java:193)
    at org.hibernate.loader.plan.exec.internal.EntityLoadQueryDetails.<init>(EntityLoadQueryDetails.java:85)
    at org.hibernate.loader.plan.exec.internal.BatchingLoadQueryDetailsFactory.makeEntityLoadQueryDetails(BatchingLoadQueryDetailsFactory.java:64)
    at org.hibernate.loader.entity.plan.AbstractLoadPlanBasedEntityLoader.<init>(AbstractLoadPlanBasedEntityLoader.java:97)
Alexei
  • 11,572
  • 19
  • 87
  • 193

0 Answers0