1
我遇到问题了解如何在应用引擎上实现一对多的无主关系。我目前正在得到一个例外,我追溯到一个空的列表。与jpa 2.0和GAE数据存储的一对多关系
@Entity
public class Inventory extends DatastoreObject {
/**
* List of all inventory items in this object.
*/
@Unowned
//@OneToMany(cascade = CascadeType.ALL)
private List<InventoryItem> inventoryItems;
}
这是我试图坚持实体时得到的异常。
java.lang.IllegalArgumentException: A collection of values is required.
at com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:157)
at com.google.appengine.api.datastore.Query$FilterPredicate.<init>(Query.java:847)
at com.google.appengine.api.datastore.Query$FilterOperator.of(Query.java:77)
at com.google.appengine.api.datastore.Query.addFilter(Query.java:336)
at com.google.appengine.datanucleus.scostore.FKListStore.getChildrenByKeys(FKListStore.java:383)
at com.google.appengine.datanucleus.scostore.FKListStore.listIterator(FKListStore.java:360)
看来datanucleus正在使用Filter IN查询来获取InventoryItem子实体。该列表最初是空的,并且不包含任何密钥,因此这会破坏我的检索。
下面是我的persistence.xml文件中的一个exert。
<exclude-unlisted-classes/>
<properties>
<property name="datanucleus.NontransactionalRead" value="true"/>
<property name="datanucleus.NontransactionalWrite" value="true"/>
<property name="datanucleus.ConnectionURL" value="appengine"/>
<property name="datanucleus.singletonEMFForName" value="true"/>
<property name="datanucleus.appengine.relationDefault" value="unowned" />
<property name="datanucleus.appengine.datastoreEnableXGTransactions" value="true"/>
</properties>
所以很奇怪的事情发生了。我更改List以使用Set 并且它可以正常工作。令我困惑的是DataTypeUtils检查类型是否为instanceof Collection >。列表扩展集合>。什么是错,或者我错过了什么。 –
我希望将它们设置为List,这样我就不必更改我的GWT编辑器代码来使用Set而不是List –
GAE JPA有一些简单的测试,用于在其代码为http://代码的SVN中取代un-uni的1-N uni .google.com/p/datanucleus-appengine/source/browse/trunk/tests/com/google/appengine/datanucleus/test/jpa/UnownedJPAOneToManyUniListSideA.java?spec = svn935&r = 935因此,请以此为指导。它不会在持续显示任何错误(但是你说你坚持,但提出检索的东西)。 FWIW“DataNucleus”不做任何查询,因为它是仅提供核心设施的第三方库; GAE JPA(由Google开发)是对其数据存储进行任何调用的插件。 – DataNucleus