Hibernate不能同时抓取多个包

问题:

在SessionFactory创建过程中,Hibernate会抛出此异常:

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 AntoherParent anotherParent;

 @OneToMany(mappedBy="parent", fetch=FetchType.EAGER)
 private List<Child> children;

}

 AnotherParent.java

@Entity
public AntoherParent {

 @Id
 @GeneratedValue(strategy=GenerationType.IDENTITY)
 private Long id;

 @OneToMany(mappedBy="parent", fetch=FetchType.EAGER)
 private List<AnotherChild> anotherChildren;

}

Hibernate不喜欢使用FetchType.EAGER的两个集合,但这似乎是一个错误,我没有做异常的事情…
ParentAnotherParent中删除FetchType.EAGER可以解决问题,但我需要这样做,所以真正的解决方案是使用@LazyCollection(LazyCollectionOption.FALSE)而不是FetchType(感谢Bozho解决方案)。

回答:

我认为一个较新版本的hibernate(支持JPA 2.0)应该处理这个。但是否则可以通过以下方式注释收集字段来处理它:

@LazyCollection(LazyCollectionOption.FALSE)

请记住从@*ToMany注释中删除fetchType属性。
但请注意,在大多数情况下,Set<Child>List<Child>更合适,因此除非您真的需要List – 去Set

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Hibernate cannot simultaneously fetch multiple bags

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

81 − 74 =