4

したがって、私は子供を順序付きリストに保つために一方向の1対多の関係があります。彼らはすでに "index"プロパティを持っているので、私はhttp://code.google.com/appengine/docs/java/datastore/jdo/relationships.htmlのアドバイスに従い、 "list-ordering"拡張子を使ってindex-propertyを使って、自動生成されたものを使うのではなく、子の順番を決めようとしました。DataNucleusのリストオーダー拡張を使用すると空のリストになる

残念ながら、できるだけ早く私は、注釈を追加すると、それは子どもを返す停止し、私だけの空のリストを与えます。

私はこの単純な例での問題を再作成:

@PersistenceCapable(detachable = "true") 
@FetchGroup(name = "parent.children", members = {@Persistent(name = "children")}) 
public class Parent { 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Key key; 

    @Persistent 
    @Order(extensions = @Extension(vendorName="datanucleus", key="list-ordering", value="index ASC")) 
    private List<Child> children; 

    // getters/setters 
} 

@PersistenceCapable(detachable = "true") 
public class Child { 
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Key key; 

    @Persistent 
    private Integer index; 

    // getters/setters 
} 

DAO:

public void save(T entity) { 
    PersistenceManager pm = getPersistenceManager(); 
    Transaction tx = pm.currentTransaction(); 
    try { 
     tx.begin(); 
     pm.makePersistent(entity); 
     tx.commit(); 
    } finally { 
     if(tx.isActive()) 
      tx.rollback(); 
     pm.close(); 
    } 
} 

public T get(Key key, String... fetchGroups) { 
    PersistenceManager pm = getPersistenceManager(); 
    Transaction tx = pm.currentTransaction(); 
    addFetchGroups(pm, fetchGroups); 
    try { 
     tx.begin(); 
     pm.setDetachAllOnCommit(true); 
     T entity = (T) pm.getObjectById(entityClass, key); 
     tx.commit(); 
     return entity; 
    } finally { 
     if(tx.isActive()) 
      tx.rollback(); 
     pm.close(); 
    } 
} 

テストコード:

Parent parent = new Parent(); 
Child child = new Child(); 
child.setIndex(10); 
parent.getChildren().add(child); 
mParentDao.save(parent); 

Parent parent2 = mParentDao.get(parent.getKey(), "parent.children"); 

は私が間違っているのことを特に何かがありますか?

ここ

[編集]関連するログ出力である:

データストア:キー親を持つ種類の子実体を置く(3:キー親と種類親エンティティ(NO-ID-まだ)
データストアを置きます)/ CHILD(NO-ID-まだ)
データストア:INDEX:10
データストア:コミットデータストアトランザクション:0
データストア:新しいデータストアトランザクションを開始:1
データストア:キー親と種類PARENTの取得エンティティ(3 )
Datastore.Retrieve:準備中種類CHILDの(3)親のすべての子供たちのために照会する
Datastore.Retrieve:追加されました並べ替え:インデックスASCENDING
Datastore.Retrieve:クエリが0の結果を持っていました。
データストア:コミットデータストアトランザクション:1
+0

私の作品:リストがでマークされていても。私はGAEプラグインのv2を使用しています。あなたがGAEデータストアへのputsとgetsを伝えるので、ログを使用してデバッグしてください – DataNucleus

+0

ログ出力の一部を追加しました。エンティティは正しく追加され、データストアに表示されますが、何らかの理由で子供を照会すると0の結果が返されます。 –

+0

私はしばらくの間困惑していた同様の問題を抱えていました。順序付きリストは注意して使用する必要があります。特に、コミットする前に順序付けフィールドを変更する場合は注意が必要です。回避策:オーダー・タグを削除し、リストにCOMPARATORを実装します。 – marcolopes

答えて

0

イムJDOでGAEプラグイン1.7.0を使用して、私のシナリオはまったく同じです。私はアイテムのリストを持っており、私は彼らの順序を維持する必要があります。

は、今私は、(機能を実装せずに)上記の変更を行うことなく、長時間のアプリを使用していました。

今日、私は記事を使用して、注文機能を実装し、データが取得されていません!データはデータベースに存在するですが、親オブジェクトのロード時にフェッチされません。

@Persistent(defaultFetchGroup = "true")

@Element(dependent = "true")

関連する問題