google-app-engine - 添加到 google-appengine 中的集合

标签 google-app-engine collections persistence jdo entities

所以我已经在这个问题上停留了大约 3 周了。我读过这个:http://code.google.com/appengine/docs/java/datastore/jdo/relationships.html它似乎并没有解决。基本上我有一个持久对象,称为池,我需要将玩家添加到这个池中。玩家也是持久对象。我在池和玩家之间有一个无主关系,其中池有一组玩家 ID(primaryKey ids ...)

所以我尝试过的事情: 1)我使用 Long 作为两者的主键,这没有用。 2) 尝试使用应用引擎中的 Key 作为主键,但这没有用,因为您不能在客户端使用 Key 的实现。我发现的解决方法都不起作用,而且数据传输对象草率/凌乱/容易出错/骇人听闻以及各种不好的。 3) 尝试使用字符串作为 id,像这样...

@Extension(vendorName="datanucleus", key="gae.encoded-pk", value="true")
private String id;

那也没用。当我尝试将一个字符串添加到它的集合中时,就像这样......

public void addPlayers(Pool pool, List<String> players) {
    PersistenceManager pm = getPersistenceManagerFactory().getPersistenceManager();

    try {
        pm.currentTransaction().begin();
        Pool oldPool = pm.getObjectById(Pool.class, pool.getID());
        for(String id : players) {
            oldPool.addPlayer(id);
            System.out.println("Added id:" + id);
        }
        pm.currentTransaction().commit();
    } catch (Exception e) {
        pm.currentTransaction().rollback();
        e.printStackTrace();
    } finally  {
        pm.close();
    }

}

它会悄无声息地失败。正如......它只是不坚持他们。

任何建议都会很棒。这是一个学校项目,所以不幸的是我被迫在 GWT 中使用 JDO 来完成它。我的教授和助教无法帮助我,因为他们不熟悉 GWT...有趣...所以这是我最后的选择:)

谢谢!

最佳答案

虽然有充分的理由将您的关系表示为实体“一”侧的列表,但更常用的方法是让“多”侧的实体引用“一”侧的实体' 边。也就是说,不是每个 Pool 都有一个 Players 列表,每个 Player 应该有一个对其所属的单个 Pool 的引用。

您有没有采用这种方法的原因?你试过了吗?

关于google-app-engine - 添加到 google-appengine 中的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5469132/

相关文章:

python - 2019 : Dynamic cron jobs Google App Engine

python - 谷歌应用引擎 : Trouble with Datastore Query

java - Vector vs Collections.synchronizedList(ArrayList)

java - Collections.synchronizedSortedMap 与 ConcurrentSkipListMap 用于并发使用的排序映射

cocoa - NSManagedObject 子类的问题

java - JDO 持久字段返回 null

google-app-engine - Google App Engine 上的 HTTP 响应 header 是否有大小限制?

java - Objectify - 查询结果列表包含 null

java - 将自定义设置数据结构转换为列表java

java - 在一些 Hibernate 关系映射方面需要帮助