使用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();
}
}
我所期望的是,新订阅的Join表和现有主题中的1-N关系。当我得到三个新的主题,新的ID插入到主题表中与新记录的1-N关系。
对我而言,DN正在考虑我对新订阅的持续性并将列表视为新数据,我正在试图弄清楚如何正确地执行此操作,因此主题列表是原始ID。
答案 0 :(得分:1)
您的JSON响应需要考虑对象是否实际存在于数据存储区中。因此,如果您遍历Topic
个对象并调用pm.getObjectById
来提供此检查,那么,如果返回了一个对象,那么您可以使用此附加Topic
而不是最初的分离对象在Subscription
列表中。
此后调用pm.makePersistent
将找到附加的对象,并相应地设置连接表条目(使用FK到TOPIC表中的现有行),而不创建新的元素对象