Hibernate génère cette exception au cours d'une SessionFactory création:
org.mise en veille prolongée.loader.MultipleBagFetchException: impossible d'extraire simultanément plusieurs sacs
C'est 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;
}
Comment à propos de ce problème? Que puis-je faire?
MODIFIER
OK, le problème que j'ai c'est que l'autre "parent" entité est à l'intérieur de mon parent, mon comportement est ceci:
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 n'aime pas les deux collections FetchType.EAGER
, mais cela semble être un bug, je ne vais pas faire des choses inhabituelles...
Retrait d' FetchType.EAGER
de Parent
ou AnotherParent
résout le problème, mais j'en ai besoin, donc vraie solution est d'utiliser @LazyCollection(LazyCollectionOption.FALSE)
au lieu de FetchType
(grâce à Bozho pour la solution).