【发布时间】: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