Hibernacja zgłasza ten wyjątek podczas tworzenia SessionFactory:
org.hibernate.loader.MultipleBagFetchException: nie można jednocześnie pobrać wielu torebek
To mój przypadek testowy:
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;
}
Co powiesz na ten problem? Co mogę zrobić?
EDYTOWAĆ
OK, mam problem z tym, że inny „rodzic” jest wewnątrz mojego rodzica, moje prawdziwe zachowanie jest takie:
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;
}
Hibernacja nie lubi dwóch kolekcji FetchType.EAGER
, ale wydaje się, że to błąd, nie robię niezwykłych rzeczy ...
Usuwanie FetchType.EAGER
z Parent
lub AnotherParent
rozwiązuje problem, ale muszę, więc prawdziwym rozwiązaniem jest użycie @LazyCollection(LazyCollectionOption.FALSE)
zamiast FetchType
(dzięki Bozho do roztworu).
select * from master; select * from child1 where master_id = :master_id; select * from child2 where master_id = :master_id
List<child>
ze fetchType
zdefiniowanym dla więcej niż jednego List<clield>