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;
}
这个问题怎么样?我能做什么?
编辑
好的,我的问题是另一个“父”实体在我的父内部,我的真实行为是这样的:
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,但这似乎是一个错误,我没有做不寻常的事情…
FetchType.EAGER从问题中删除Parent或AnotherParent解决问题,但是我需要它,因此真正的解决方案是使用@LazyCollection(LazyCollectionOption.FALSE)而不是FetchType(感谢Bozho提供解决方案)。
我认为较新版本的hibernate(支持JPA 2.0)应该可以解决此问题。但是,否则,你可以通过以下方式对集合字段进行注释来解决:
@LazyCollection(LazyCollectionOption.FALSE)
请记住fetchType
从@*ToMany
注释中删除该属性。
但请注意,在大多数情况下,a Set<Child>
比更为合适List<Child>
,因此除非你确实需要List-Set
但是请记住,使用集不会消除Vlad Mihalcea在其答案中描述的底层笛卡尔积!
问题内容: Hibernate在创建SessionFactory时抛出此异常: org.hibernate.loader.MultipleBagFetchException:无法同时获取多个包 这是我的测试用例: Parent.java Child.java 这个问题怎么样?我能做什么? 编辑 好的,我的问题是另一个“父”实体在我的父内部,我的真实行为是这样的: Parent.java Anoth
我有以下实体 注册程序 教练 官方 基本上,我有与(Trainer-Register steredProgram,官方注册程序)有多对一关系的实体。现在我有一个服务已经满足了我的要求,通过id获取注册程序,我应该只包含所有的和与isDeletedfalse。请参阅下面的服务: 服务 现在,我尝试使用< code>@Query和< code>@EntityGraph,这样我就可以只使用一个查询就获得
问题内容: 以下是我的代码在这里,我使用多个列表从数据库中获取数据。从hql查询中获取数据时显示异常。 Pojo课 hmb.xml文件 HQL查询 我正在尝试以下查询从数据库中获取数据,但这显示了 如何解决此问题 问题答案: 这是一个非常常见的问题,所以我决定将答案变成一篇文章。 Hibernate不允许获取一个以上的包,因为这会生成Cartesian。 现在,您会发现很多答案,博客文章,视频或其
我需要配置SpringJPA(EntityManager)Hibernate 如果我必须fetch=FetchType。如果必须fetch=FetchType,则延迟运行服务器成功 。急切运行服务器错误: I使用tomcat 7 由:org引起。springframework。豆。工厂BeanCreationException:创建名为“entityManagerFactory”的bean时出错,
问题内容: 我们有一个项目,需要延迟加载实体的集合,但是在某些情况下,我们需要热切地加载它们。我们已经为实体添加了注释。在我们的存储库方法中,我们添加了一个“ javax.persistence.loadgraph”提示来热切加载上述注释中定义的4个属性。当我们调用该查询时,Hibernate抛出。 有趣的是,当我重新定义所有这些集合时,Hibernate 确实不 使用MultipleBagFet
我想点击类id为clsArrowClick的锚标记,并且相同的id在另一个锚标记上。 我尝试了list、wait方法和simple way方法,但我的程序在线程“main”org.openqa.selenium.ElementNotVisibleException中抛出了一个错误异常 就像 //WebDriverWait wait=new WebDriverWait(驱动程序,30);//wait