DataNucleus 将现有的多个外键添加到 Object
DataNucleus add existing multiple foreign keys to Object
使用 JDO 和 DataNucleus 如果我有一个 @PersistenceCapable
class 喜欢
@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,并将这些主题添加到新订阅的列表中
A JSON post body 可能看起来像这样:
{
"topics": [{
"id": "402881115c63f3da015c63f3daa40000",
}, {
"id": "402881115c63f3da015c63f3daca0001",
}, {
"id": "402881115c63f3da015c63f3dade0002",
}]
}
我现在想这样坚持我的新订阅:
public void addEntity(Subscription s) {
PersistenceManager pm = persistenceManagerFactory.getPersistenceManager();
try{
pm.makePersistent(s);
} finally {
pm.close();
}
}
我期望的是新订阅和现有主题的连接 table 中的 1-N 关系。当我得到的是三个新主题,新 ID 插入到主题 table 中,与新记录具有 1-N 关系。
我认为 DN 正在接受我对新订阅的坚持并将列表视为新数据,这对我来说很有意义,我正在尝试弄清楚如何正确地执行此操作,以便主题列表是原始 ID。
您的 JSON 响应需要考虑对象是否实际存在于数据存储区中。因此,如果您遍历 Topic
对象并调用 pm.getObjectById
来提供此检查,那么,如果返回了一个对象,那么您可以使用此附加 Topic
而不是您最初拥有的分离对象在 Subscription
列表中。
此后调用 pm.makePersistent
将找到附加对象并相应地设置连接 table 条目(使用 FK 到 TOPIC table 中的现有行),而不创建新的元素对象
使用 JDO 和 DataNucleus 如果我有一个 @PersistenceCapable
class 喜欢
@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,并将这些主题添加到新订阅的列表中
A JSON post body 可能看起来像这样:
{
"topics": [{
"id": "402881115c63f3da015c63f3daa40000",
}, {
"id": "402881115c63f3da015c63f3daca0001",
}, {
"id": "402881115c63f3da015c63f3dade0002",
}]
}
我现在想这样坚持我的新订阅:
public void addEntity(Subscription s) {
PersistenceManager pm = persistenceManagerFactory.getPersistenceManager();
try{
pm.makePersistent(s);
} finally {
pm.close();
}
}
我期望的是新订阅和现有主题的连接 table 中的 1-N 关系。当我得到的是三个新主题,新 ID 插入到主题 table 中,与新记录具有 1-N 关系。
我认为 DN 正在接受我对新订阅的坚持并将列表视为新数据,这对我来说很有意义,我正在尝试弄清楚如何正确地执行此操作,以便主题列表是原始 ID。
您的 JSON 响应需要考虑对象是否实际存在于数据存储区中。因此,如果您遍历 Topic
对象并调用 pm.getObjectById
来提供此检查,那么,如果返回了一个对象,那么您可以使用此附加 Topic
而不是您最初拥有的分离对象在 Subscription
列表中。
此后调用 pm.makePersistent
将找到附加对象并相应地设置连接 table 条目(使用 FK 到 TOPIC table 中的现有行),而不创建新的元素对象