0 votes
1 view
in Java by (4.1k points)

Hibernate throws this exception during SessionFactory creation:

org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags

This is my test case:

Parent.java

@Entity

public Parent {

 @Id

 @GeneratedValue(strategy=GenerationType.IDENTITY)

 private Long id;

 @OneToMany(mappedBy="parent", fetch=FetchType.EAGER)

 // @IndexColumn(name="INDEX_COL") if I had this the problem solve but I retrieve more children than I have, one child is null.

 private List<Child> children;

}

Child.java

@Entity

public Child {

 @Id

 @GeneratedValue(strategy=GenerationType.IDENTITY)

 private Long id;

 @ManyToOne

 private Parent parent;

}

How about this problem? What can I do?

EDIT

OK, the problem I have is that another "parent" entity is inside my parent, my real behavior is this:

Parent.java

@Entity

public Parent {

 @Id

 @GeneratedValue(strategy=GenerationType.IDENTITY)

 private Long id;

 @ManyToOne

 private AntoherParent anotherParent;

 @OneToMany(mappedBy="parent", fetch=FetchType.EAGER)

 private List<Child> children;

}

AnotherParent.java

@Entity

public AntoherParent {

 @Id

 @GeneratedValue(strategy=GenerationType.IDENTITY)

 private Long id;

 @OneToMany(mappedBy="parent", fetch=FetchType.EAGER)

 private List<AnotherChild> anotherChildren;

}

Hibernate doesn't like two collections with FetchType.EAGER, but this seems to be a bug, I'm not doing unusual things...

Removing FetchType.EAGER from Parent or AnotherParent solves the problem, but I need it, so real solution is to use @LazyCollection(LazyCollectionOption.FALSE) instead of FetchType (thanks to Bozho for the solution).

1 Answer

0 votes
by (46.1k points)

You need to perform this in a newer version of hibernate ( JPA 2.0 or above). But contrarily you can work it almost by annotating the collection fields with:

@LazyCollection(LazyCollectionOption.FALSE)

Remember to remove the fetchType attribute from the @*ToMany annotation.

However note that in most examples a Set<Child> is more relevant than List<Child>, so except you really need a List - go for Set

Welcome to Intellipaat Community. Get your technical queries answered by top developers !


Categories

...