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