Hibernate ném ngoại lệ này trong quá trình tạo SessionFactory:
org.hibernate.loader.Mult MônBagFetchException: không thể tải cùng lúc nhiều túi
Đây là trường hợp thử nghiệm của tôi:
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;
}
Làm thế nào về vấn đề này? Tôi có thể làm gì?
BIÊN TẬP
OK, vấn đề tôi gặp phải là một thực thể "cha mẹ" khác ở trong cha mẹ tôi, hành vi thực sự của tôi là thế này:
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 không thích hai bộ sưu tập với FetchType.EAGER
, nhưng đây có vẻ là một lỗi, tôi không làm những điều khác thường ...
Loại bỏ FetchType.EAGER
từ Parent
hoặc AnotherParent
giải quyết vấn đề, nhưng tôi cần nó, vì vậy giải pháp thực sự là để sử dụng @LazyCollection(LazyCollectionOption.FALSE)
thay vì FetchType
(nhờ Bozho cho các giải pháp).
select * from master; select * from child1 where master_id = :master_id; select * from child2 where master_id = :master_id
List<child>
với fetchType
định nghĩa cho nhiều hơn một List<clield>