【问题标题】:JDO Persist an existing entity creats new entry in DBJDO 持久化现有实体在 DB 中创建新条目
【发布时间】:2014-01-12 00:27:03
【问题描述】:

这是我第一个使用 JDO 的例子 我有班级帐号:

public class Compte
{
    @PrimaryKey
    @Persistent(valueStrategy=IdGeneratorStrategy.INCREMENT)
    private int idCompte;
    // other attributes
    private Regle regle;
    // ....
}

我在 regle 表中保存了实体,当我想创建一个新的 Compte 时,我会检索 其中一个 Regle,我将它添加到新的 Compte 中,我让 Compte 持久化。 我这样做:

Compte compte = new Compte();
Regle regle = retreiveRegleByName(name);
compte.setRegle(regle);
saveCompte(compte);

// this is the code of the method saveCompte()
public void creerCompteParticulier(CompteParticulier compteParticulier)
{
    // Persistence of a particular client account
    PersistenceManager pm = pmf.getPersistenceManager();
    Transaction tx = pm.currentTransaction();
    try
    {
        // begin transaction
        tx.begin();
        pm.makePersistent(compteParticulier);
        tx.commit();

    } catch (Exception exp)
    {

        LOGGER.error("Error: ", exp);
    }
    finally
    {
        if (tx.isActive())
        {
            tx.rollback();
        }
        pm.close();
    }        
}

新的 Compte 已添加到特定表中,但我的问题是: 我在 regle 表中有一个新实体。

你能帮帮我吗,我想用从数据库中检索的 Regle 创建一个新的 Compte,而不是一个新的 Regle。

注意:在 JDO 中不存在类似 JPA 中的 merge() 方法吗? 我认为在 jpa 中这个问题可以通过使用 merg() 来解决。

【问题讨论】:

  • compteParticulier.idCompte 的值是多少?有没有可能是 0?
  • 是 idCompte = 0 因为 Compte 它是一个新实例但是 idRegle 不是 zoro (非空),因为我从数据库中检索到它

标签: merge jdo persist


【解决方案1】:

makePersistent 会“合并”现有对象当对象是现有的分离对象时。您的对象显然没有分离,因此建议您阅读有关分离对象的内容。阅读日志会提供很多见解

【讨论】:

  • 我读到 there 方法 pm.makePersistent() 重新附加对象。那么为什么它会创建一个新的 Regle 对象呢?
  • 它创建了一个新对象,因为它没有被分离。你不能重新连接一开始就没有分离的东西。
  • 我做了这个 Regle regle = (Regle)pm.detachCopy(retreivedRegle); newCompte.setRegle(regle); pm.makePersistent(newCompte);但我总是遇到同样的问题,它会创建一个新的 Regle 实例
  • 这个类是可拆卸的,是吗?也许不是,。很明显,日志会告诉你发生了什么,但我看不到它的引用。
  • 我将此注释添加到实体可拆卸=“真”的声明中,现在它运行良好。非常感谢我的最后一个问题是:如何激活日志以显示数据库操作的日志。在 datanucleus.log 中,我只找到增强器的日志。
猜你喜欢
  • 1970-01-01
  • 2012-01-15
  • 2019-10-20
  • 2013-04-06
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多