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;
}
Як щодо цієї проблеми? Що я можу зробити?
EDIT
Гаразд, проблема, що я маю, полягає в тому, що ще одна "батьківська" сутність знаходиться всередині мого батька, моя реальна поведінка така:
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 не любить дві колекції 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>