0

そうです、ここで完全に間違ったツリーに吠えているのかどうかはわかりません。JDO と Google AppEngine を理解するのは少し難しいと思います。とにかく、ここに行きます。

内部変数の 1 つとして別のクラスを含むクラスがあります (player1 を参照)。

  @PersistenceCapable(identityType = IdentityType.APPLICATION)
   public class JDOGame 
   {    
    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Long id; 

    @Persistent
    private String map; 

    @Persistent
    private RPCDataPlayer player1;

   // getters, setters, constructors etc...
   }

クラス RPCDataPlayer は Serializable であり、非常に基本的です....

public class RPCDataPlayer implements IsSerializable 
{
    public String name;
    public int id;

        // getters & setters & constructors oh my

        public int getId() { return id; }
}

それで、私の質問は... id = x の RPCDataPlayer を含むすべての JDOGames を取得できるクエリを作成するにはどうすればよいですか?

みたいなクエリができない…

SELECT FROM JDOGame.class.getName() WHERE player1.getId() == x

...では、これを機能させるために人々はどのようなテクニックや提案を持っていますか?

前もって感謝します。

4

2 に答える 2

2

Google App Engine データベースはリレーショナル データベースではないため、結合を行うことはできません。RPCDataPlayer をテーブルとして永続化できます。

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class RPCDataPlayer {

    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Key key;

    @Persistent(mappedBy = "player1")
    private List<JDOGame> jdoGames = new ArrayList<JDOGame>();

    @Persistent
    public String name;

    @Persistent
    public int id;

    public int getId() {
        return id;
    }

    public Key getKey() {
        return key;
    }

    public void setJdoGames(List<JDOGame> jdoGames) {
        this.jdoGames = jdoGames;
    }

    public List<JDOGame> getJdoGames() {
        return jdoGames;
    }

}

そして、このようにクエリを実行できます。

SELECT FROM RPCDataPlayer.class.getName() WHERE id == x

RPCDataPlayer のインスタンスを取得したら、次のように呼び出して JDOGame を取得できます。

List<JDOGame> jdoGames = rpcDataPlayer.getJdoGames();
于 2010-01-18T02:11:21.680 に答える
1

フィールドはデータストアでシリアル化されているため、データストアでクエリを実行できないことは明らかです。したがって、これらのすべてのレコードを取得し、メモリ内でクエリを実行する必要があります。GAE/J が最終的に彼らの行動をまとめ、人々がそれを行うことができるようになると、それは簡単になります。それまでは、すべてのレコードを自分で取得してチェックする必要があります。

合流とか全然関係ない

于 2010-01-18T16:06:30.073 に答える