是的,我不知道我是不是在这里完全错误地咆哮 - 我发现JDO和谷歌AppEngine有点棘手。无论如何,这里也是。
我有一个类包含另一个类作为其内部变量之一(参见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
...那么人们有什么技巧或建议让它起作用?
提前致谢。
答案 0 :(得分: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();
答案 1 :(得分:1)
您的字段在数据存储区中被序列化,因此您显然无法在数据存储区中执行查询,因此所有这些记录都需要检索并在内存中进行查询。当GAE / J最终一起行动并允许人们这样做时,那将是微不足道的,直到那时你需要自己检索所有记录并进行检查。
与联接无关