Hibernate löst diese Ausnahme bei der Erstellung der SessionFactory aus:
org.hibernate.loader.MultipleBagFetchException: kann nicht mehrere Taschen gleichzeitig abrufen
Dies ist mein Testfall:
Elternteil.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;
}
Kind.java
@Entity
public Child {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@ManyToOne
private Parent parent;
}
Was ist mit diesem Problem? Was kann ich tun?
EDITAR
OK, das Problem, das ich habe, ist, dass eine andere "übergeordnete" Entität innerhalb meiner übergeordneten ist, mein wirkliches Verhalten ist dies:
Elternteil.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 mag keine zwei Sammlungen mit FetchType.EAGER
aber das scheint ein Fehler zu sein, ich mache keine ungewöhnlichen Dinge...
Entfernen von FetchType.EAGER
de Parent
o AnotherParent
löst das Problem, aber ich brauche es, also ist die wirkliche Lösung die Verwendung von @LazyCollection(LazyCollectionOption.FALSE)
anstelle von FetchType
(Dank an Bozho für die Lösung).
2 Stimmen
Ich würde fragen, welche SQL-Abfrage Sie zu erstellen hoffen, die zwei separate Sammlungen gleichzeitig abruft? Die Arten von SQL, mit denen dies möglich wäre, würden entweder eine kartesische Verknüpfung (potenziell höchst ineffizient) oder eine UNION disjunkter Spalten (ebenfalls hässlich) erfordern. Vermutlich hat die Unfähigkeit, dies in SQL auf eine saubere und effiziente Weise zu erreichen, das API-Design beeinflusst.
0 Stimmen
@ThomasW Dies sind die Sql-Abfragen, die das Programm generieren sollte:
select * from master; select * from child1 where master_id = :master_id; select * from child2 where master_id = :master_id
2 Stimmen
Ein ähnlicher Fehler kann auftreten, wenn Sie mehr als eine
List<child>
confetchType
definiert für mehr als eineList<clield>