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的系列,但这似乎是一个错误,我没有做不寻常的事情...

ParentAnotherParent中删除FetchType.EAGER解决了这个问题,但我需要它,所以真正的解决方案是使用@LazyCollection(LazyCollectionOption.FALSE)而不是FetchType(因为解决方案是Bozho).

推荐答案

我认为hibernate的更新版本(支持JPA2.0)应该可以处理这个问题.但除此之外,您可以通过以下方式对集合字段进行注释:

@LazyCollection(LazyCollectionOption.FALSE)

记住从@*ToMany注释中删除fetchType属性.

但请注意,在大多数情况下,Set<Child>List<Child>更合适,所以除非你真的需要List,否则 Select Set

但要提醒的是,使用集合won't可以消除Vlad Mihalcea in his answer所描述的基线Cartesian Product

Java相关问答推荐

ActivityCompat.请求收件箱自动拒绝权限

如何使用Java API在Oracle ODI中运行模拟?

如何在Javascript中设置文本区域圆角的样式

Java中后期绑定的替代概念

无法在org. openjfx:javafx—fxml:21的下列变体之间进行 Select

路径映射未发生

为什么我的ArrayList索引的索引总是返回-1?

Hibernate EmptyInterceptor可以工作,但不能拦截器

试着做一个2x2的魔方求解算法,我如何找到解路径(DFS)?

为什么在maven中,getLast方法不适用于List?

如何使用SpringBoot中的可分页对整数作为字符串存储在数据库中时进行排序

OpenGL ES 3.0-纹理黑色

在JDK 1.8源代码中,为什么使用A-B 0来确定哪个更大,而不是A B?

Java构造函数分支

使用Class.this.field=Value初始化构造函数中的最后一个字段会产生错误,而使用this.field=Value则不会

使用for循环时出现堆栈溢出错误,但如果使用if块执行相同的操作,则不会产生错误

Bash数组的单引号元素并使用空格连接

将基于实例编号的对象列表拆分为新的对象列表

如何使用Hibernate v6.2构建NamingStrategy,以表名作为所有列的前缀?

使用原子整数的共享计数器并发增量