blow blow -4 years ago 167
Java Question

Hibernate cannot simultaneously fetch multiple bags

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).

Answer Source

I think a newer version of hibernate (supporting JPA 2.0) should handle this. But otherwise you can work it around by annotating the collection fields with:

@LazyCollection(LazyCollectionOption.FALSE)

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

But note that in most cases a Set<Child> is more appropriate than List<Child>, so unless you really need a List - go for Set

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download