我在两个实体之间有一对多的关系,相关部分如下所示:
“一部分”(购物车):
@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]
答案 0 :(得分:0)
对我来说,似乎你的另一个集合正在你的实体中急切地加载。考虑将其中一个更改为fetch=FetchType.LAZY
。
如果无法做到,请从fetch=FetchType.EAGER
关系中移除@OneToMany
并使用@LazyCollection(LazyCollectionOption.FALSE)