Hibernate genera questa eccezione durante la creazione di SessionFactory:
org.hibernate.loader.MultipleBagFetchException: impossibile recuperare contemporaneamente più sacchetti
Questo è il mio caso di prova:
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;
}
Che ne dici di questo problema? Cosa posso fare?
MODIFICARE
OK, il problema che ho è che un'altra entità "genitore" è dentro il mio genitore, il mio vero comportamento è questo:
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<Child> children;
}
AnotherParent.java
@Entity
public AnotherParent {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy="parent", fetch=FetchType.EAGER)
private List<AnotherChild> anotherChildren;
}
A Hibernate non piacciono due raccolte FetchType.EAGER
, ma questo sembra essere un bug, non sto facendo cose insolite ...
Rimozione FetchType.EAGER
dal Parent
o AnotherParent
risolve il problema, ma bisogno, così vera soluzione è quella di utilizzare @LazyCollection(LazyCollectionOption.FALSE)
invece FetchType
(grazie a Bozho per la soluzione).
select * from master; select * from child1 where master_id = :master_id; select * from child2 where master_id = :master_id
List<child>
con fetchType
definito per più di una List<clield>