O Hibernate lança essa exceção durante a criação do SessionFactory:
org.hibernate.loader.MultipleBagFetchException: não é possível buscar simultaneamente vários pacotes
Este é o meu caso de teste:
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;
}
E esse problema? O que eu posso fazer?
EDITAR
OK, o problema que tenho é que outra entidade "pai" está dentro do meu pai, meu comportamento real é este:
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;
}
O Hibernate não gosta de duas coleções FetchType.EAGER
, mas isso parece ser um bug, não estou fazendo coisas incomuns ...
Remoção FetchType.EAGER
de Parent
ou AnotherParent
resolve o problema, mas eu preciso dele, então verdadeira solução é usar @LazyCollection(LazyCollectionOption.FALSE)
em vez de FetchType
(graças a Bozho para a solução).
select * from master; select * from child1 where master_id = :master_id; select * from child2 where master_id = :master_id
List<child>
com fetchType
definido para mais de um List<clield>