设置FetchType时出现PersistenceException

时间:2014-02-21 23:03:45

标签: java hibernate jpa

我在两个实体之间有一对多的关系,相关部分如下所示:

“一部分”(购物车):

@OneToMany(mappedBy="cart", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private List<Item> items;

“多部分”(项目):

@ManyToOne
private Cart cart;

只要我避免将FetchType传递给@OneToMany,这就有效。添加FetchType时(如上所示)我得到 PersistenceException (不是很有帮助):

  

[PersistenceUnit:defaultPersistenceUnit]无法构建   EntityManagerFactory的

我的代码中还有一些其他实体具有一对多关系,看起来与上面的关系完全相同,并且在传递FetchType时不会产生此异常。这是为什么?我正在使用Hibernate。

修改

如果重要:Cart-Entity是多部分,而Item-Entity是上面未显示的其他关系的一部分。

EDIT2:

堆栈跟踪:

PersistenceException: [PersistenceUnit: defaultPersistenceUnit] Unable to build EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915) ~[hibernate-entitymanager-3.6.9.Final.jar:3.6.9.Final]
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57) ~[hibernate-entitymanager-.6.9.Final.jar:3.6.9.Final]
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63) ~[hibernate-jpa-2.0-api.jar:1.0.1.Final]
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) ~[hibernate-jpa-2.0-api.jar:1.0.1.Final]
at play.db.jpa.JPAPlugin.onStart(JPAPlugin.java:35) ~[play-java-jpa_2.10.jar:2.2.1]
at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:88) ~[play_2.10.jar:2.2.1] Caused by: org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
at org.hibernate.loader.BasicLoader.postInstantiate(BasicLoader.java:94) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final]
at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:119) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final]
at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:71) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final]
at org.hibernate.loader.entity.EntityLoader.<init>(EntityLoader.java:54) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final]
at org.hibernate.loader.entity.BatchingEntityLoader.createBatchingEntityLoader(BatchingEntityLoader.java:133) ~[hibernate-core-.6.9.Final.jar:3.6.9.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.createEntityLoader(AbstractEntityPersister.java:1914) ~[hibernate-core-3.6.9.Final.jar:3.6.9.Final]

1 个答案:

答案 0 :(得分:0)

对我来说,似乎你的另一个集合正在你的实体中急切地加载。考虑将其中一个更改为fetch=FetchType.LAZY

如果无法做到,请从fetch=FetchType.EAGER关系中移除@OneToMany并使用@LazyCollection(LazyCollectionOption.FALSE)

进行注释