gpt4 book ai didi

java - DataNucleus 将现有的多个外键添加到 Object

转载 作者:行者123 更新时间:2023-12-02 13:01:01 24 4
gpt4 key购买 nike

使用 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。

最佳答案

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

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

关于java - DataNucleus 将现有的多个外键添加到 Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44294068/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com