Hibernate löst diese Ausnahme während der SessionFactory-Erstellung aus:
org.hibernate.loader.MultipleBagFetchException: Es können nicht mehrere Taschen gleichzeitig abgerufen werden
Dies ist mein Testfall:
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;
}
Wie wäre es mit diesem Problem? Was kann ich machen?
BEARBEITEN
OK, das Problem, das ich habe, ist, dass sich eine andere "übergeordnete" Entität in meinem übergeordneten Element befindet. Mein wirkliches Verhalten ist folgendes:
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 mag keine zwei Sammlungen mit FetchType.EAGER
, aber das scheint ein Fehler zu sein, ich mache keine ungewöhnlichen Dinge ...
Das Entfernen FetchType.EAGER
von Parent
oder AnotherParent
löst das Problem, aber ich brauche es, so wirkliche Lösung zu verwenden ist @LazyCollection(LazyCollectionOption.FALSE)
statt FetchType
(dank Bozho für die Lösung).
select * from master; select * from child1 where master_id = :master_id; select * from child2 where master_id = :master_id
List<child>
mit fetchType
für definierte mehr als eine List<clield>