debugjavaCritical
Hibernate throws MultipleBagFetchException - cannot simultaneously fetch multiple bags
Viewed 0 times
fetchhibernatemultiplebagfetchexceptionsimultaneouslymultiplethrowsbagscannot
Problem
Hibernate throws this exception during SessionFactory creation:
org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
This is my test case:
Parent.java
Child.java
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
AnotherParent.java
Hibernate doesn't like two collections with
Removing
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 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 AnotherParent anotherParent;
@OneToMany(mappedBy="parent", fetch=FetchType.EAGER)
private List children;
}AnotherParent.java
@Entity
public AnotherParent {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy="parent", fetch=FetchType.EAGER)
private List 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).Solution
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:
Remember to remove the
But note that in most cases a
Use with caution
Remember that using a
@LazyCollection(LazyCollectionOption.FALSE)Remember to remove the
fetchType attribute from the @*ToMany annotation.But note that in most cases a
Set is more appropriate than List, so unless you really need a List - go for SetUse with caution
Remember that using a
Set won't eliminate the underlying Cartesian Product as described by Vlad Mihalcea in his answer, featured as "The worst solution"!Code Snippets
@LazyCollection(LazyCollectionOption.FALSE)Context
Stack Overflow Q#4334970, score: 693
Revisions (0)
No revisions yet.