相关疑难解决方法(0)

Hibernate无法同时获取多个行李

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;

}
Run Code Online (Sandbox Code Playgroud)

Child.java

@Entity
public Child {

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

 @ManyToOne
 private Parent parent;

}
Run Code Online (Sandbox Code Playgroud)

这个问题怎么样?我能做什么?


编辑

好吧,我遇到的问题是另一个"父"实体在我父母的内部,我的真实行为是这样的:

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;

}
Run Code Online (Sandbox Code Playgroud)

AnotherParent.java

@Entity …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa

428
推荐指数
8
解决办法
29万
查看次数

使用JPA在Hibernate中使用EAGER类型进行多次提取

我有一个实体,其中包含:

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "assessment")
@OrderBy(value = "order ASC")
private List<AssessmentPart> assessmentParts = new LinkedList<>();

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "assessment")
private List<AssessmentText> texts = new LinkedList<>();
Run Code Online (Sandbox Code Playgroud)

如你所见,有两个集合需要急切加载.这不起作用,hibernate引发异常:

Caused by: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
Run Code Online (Sandbox Code Playgroud)

那是因为Hibernate无法一次性获取多个集合.但是,如果我改变ListSetLinkedListHashSet这部分工作正常,但其他-发生更恼人的问题.

当我试图从数据库中获取实体时使用:

entityManager.find(entityClass, primaryKey);
Run Code Online (Sandbox Code Playgroud)

它失败了:

org.hibernate.AssertionFailure: null identifier
Run Code Online (Sandbox Code Playgroud)

我确信我传递给find方法的ID 不是null,我已经调试过,我确信这一点.它在某种程度上消失在Hibernate内部.

如果我将集合类型更改为LAZY一切正常工作没有错误,但在某些情况下我需要使用EAGER.

有没有人有解决方法如何修复它?要么我可以有一个集,但防止发生断言错误或我可以有一个列表但不知何故避免多个获取包错误.

我在用:

Hibernate 4.2.2.Final
Tomcat 7
JPA 2.0
JDK 1.7
Run Code Online (Sandbox Code Playgroud)

编辑 …

java tomcat hibernate jpa

33
推荐指数
2
解决办法
5万
查看次数

标签 统计

hibernate ×2

java ×2

jpa ×2

tomcat ×1