1

アプリ エンジンで 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 ファイルからの出力です。

<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>
4

1 に答える 1

0

コレクションを初期化する必要があります

@OneToMany(fetch = FetchType.LAZY)
@Unowned
private List<InventoryItem> inventoryItems = new ArrayList<InventoryItem>();     
于 2015-08-26T12:38:33.377 に答える