我在理解如何在app引擎上实现1对多无主关系时遇到问题。我正在获得一个异常,我追溯到一个空列表。
@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>
答案 0 :(得分:0)
您需要初始化集合
@OneToMany(fetch = FetchType.LAZY)
@Unowned
private List<InventoryItem> inventoryItems = new ArrayList<InventoryItem>();