Hibernate melempar pengecualian ini selama pembuatan SessionFactory:
org.hibernate.loader.MultipleBagFetchException: tidak dapat secara bersamaan mengambil beberapa tas
Ini adalah ujian saya:
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;
}
Bagaimana dengan masalah ini? Apa yang dapat saya?
EDIT
OK, masalah yang saya miliki adalah entitas "induk" lain ada di dalam orangtua saya, perilaku saya yang sebenarnya adalah ini:
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 tidak suka dengan dua koleksi FetchType.EAGER
, tapi ini sepertinya bug, saya tidak melakukan hal-hal yang tidak biasa ...
Menghapus FetchType.EAGER
dari Parent
atau AnotherParent
memecahkan masalah, tapi saya membutuhkannya, jadi solusi sebenarnya adalah dengan menggunakan @LazyCollection(LazyCollectionOption.FALSE)
alih-alih FetchType
(terima kasih kepada Bozho untuk solusinya).
select * from master; select * from child1 where master_id = :master_id; select * from child2 where master_id = :master_id
List<child>
dengan fetchType
didefinisikan lebih dari satu List<clield>