【问题标题】:DataNucleus add existing multiple foreign keys to ObjectDataNucleus 将现有的多个外键添加到 Object
【发布时间】:2017-05-31 20:25:37
【问题描述】:

使用 JDO 和 DataNucleus 如果我有一个 @PersistenceCapable 之类的类

@PersistenceCapable
public class Topic  {

            @PrimaryKey
            @Unique
            @Persistent(valueStrategy = IdGeneratorStrategy.UUIDHEX)
            private String id;
    }

还有一个

@PersistenceCapable
public class Subscription  {

    @PrimaryKey
    @Unique
    @Persistent(valueStrategy = IdGeneratorStrategy.UUIDHEX)
    private String id;

    @Persistent
    @Join(column="SUBSCRIBE_ID_OID")
    @Element(column="TOPIC_ID_EID")
    private List<Topic> topics;

}

在我的客户端代码中,我下载了一个主题列表,每个主题都有一个 ID,并将这些主题添加到新订阅中的列表中

JSON 帖子正文可能如下所示:

{
    "topics": [{

        "id": "402881115c63f3da015c63f3daa40000",

    }, {

        "id": "402881115c63f3da015c63f3daca0001",

    }, {

        "id": "402881115c63f3da015c63f3dade0002",

    }]
}

我现在想坚持我的新订阅:

 public void addEntity(Subscription s) {
        PersistenceManager pm = persistenceManagerFactory.getPersistenceManager();

        try{
            pm.makePersistent(s);

        } finally {
            pm.close();
        }
    }

我期望的是,新订阅和现有主题的联接表中存在 1-N 关系。当我得到三个新的主题时,新的 ID 被插入到与新记录有 1-N 关系的主题表中。

对我来说,DN 正在接受我对新订阅的持久性并将列表视为新数据,这对我来说很有意义,我试图弄清楚如何正确执行此操作,以便主题列表是原始 ID。

【问题讨论】:

  • 不知道那个帖子想说什么。您有一个 1-N 连接表关系,因此有表 BAR、BAR_FOOS 和 FOO。和 ?您没有发布用于创建对象和连接表条目的持久性代码。如果你的意思是你已经有一些 Foo 对象然后检索这些对象并将它们添加到 Bar
  • 谢谢 - 我添加了一些编辑以进行澄清,听起来我需要用附加的对象重建我的列表 - 我相信我会解决这个问题的,我很感激回复
  • 当您收到 JSON 响应时,对于每个主题,使用 pm.getObjectById 检查它们是否存在?如果不存在,则创建一个新的(而不仅仅是创建一个新的)
  • 是的,在调用 pm.makePersistent(s) 之前;我遍历主题,通过 id 调用 get object 并将分离的 Subscription 替换为响应,然后一切正常。随意发布这个作为答案,我会这样标记它。谢谢尼尔。

标签: java jdo datanucleus


【解决方案1】:

您的 JSON 响应需要考虑对象是否实际存在于数据存储中。因此,如果您遍历您的 Topic 对象并调用 pm.getObjectById 来提供此检查,那么,如果返回一个对象,那么您可以使用此附加的 Topic 而不是您最初在 Subscription 列表中的分离的.

此后调用pm.makePersistent 将找到附加的对象并相应地设置连接表条目(对 TOPIC 表中的现有行使用 FK),而不创建新的元素对象

【讨论】:

    猜你喜欢
    • 2012-04-19
    • 2012-05-10
    • 2014-02-20
    • 1970-01-01
    • 2013-07-13
    • 2011-10-07
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多