Hibernate แสดงข้อยกเว้นนี้ระหว่างการสร้าง SessionFactory
org.hibernate.loader.MultipleBagFetchException: ไม่สามารถดึงหลายถุงพร้อมกันได้
นี่คือกรณีทดสอบของฉัน:
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;
}
แล้วปัญหานี้ล่ะ? ฉันควรทำอย่างไร
แก้ไข
ตกลงปัญหาที่ฉันมีคือเอนทิตี "พาเรนต์" อื่นอยู่ในพาเรนต์ของฉันพฤติกรรมที่แท้จริงของฉันคือ:
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;
}
ไฮเบอร์เนตไม่ชอบคอลเลคชั่นสองอย่างFetchType.EAGER
แต่นี่เป็นข้อผิดพลาดฉันไม่ได้ทำสิ่งผิดปกติ ...
เอาFetchType.EAGER
ออกParent
หรือAnotherParent
แก้ปัญหา แต่ฉันต้องการมันดังนั้นทางออกที่แท้จริงคือการใช้@LazyCollection(LazyCollectionOption.FALSE)
แทนFetchType
(ขอบคุณBozhoสำหรับการแก้ปัญหา)
select * from master; select * from child1 where master_id = :master_id; select * from child2 where master_id = :master_id
List<child>
มีการfetchType
กำหนดไว้มากกว่าหนึ่ง List<clield>