Hibernate lève cette exception lors de la création de SessionFactory:
org.hibernate.loader.MultipleBagFetchException: impossible de récupérer simultanément plusieurs sacs
Voici mon cas de test:
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;
}
Et ce problème? Que puis-je faire?
ÉDITER
OK, le problème que j'ai est qu'une autre entité "parent" est à l'intérieur de mon parent, mon comportement réel est le suivant:
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;
}
Hibernate n'aime pas deux collections avec FetchType.EAGER
, mais cela semble être un bug, je ne fais pas de choses inhabituelles ...
Retrait FetchType.EAGER
du Parent
ou AnotherParent
permet de résoudre le problème, mais je dois, donc vraie solution est d'utiliser au @LazyCollection(LazyCollectionOption.FALSE)
lieu de FetchType
(grâce à Bozho pour la solution).
select * from master; select * from child1 where master_id = :master_id; select * from child2 where master_id = :master_id
List<child>
avec fetchType
défini pour plus d'un List<clield>