在对象上执行persist()时,JDO / ORM的行为是什么?

时间:2012-04-12 13:32:12

标签: jpa persistence jdo

这是我的场景(我正在使用datanucleus,JDO,但我认为它也适用于JPA):

tx.begin();
Dog d = new Dog();
persistenceManager.persist(d);
d.setName("Doggie");
tx.commit();

在上面的代码中,名称“Doggie”在数据库中不是持久的。 但是,在做的时候

tx.begin();
Dog d = new Dog();
d.setSize(10);
persistenceManager.persist(d);
Dog d2 = dogDao.getDogBySize(10);
d2.setName("Doggie");
tx.commit();

它有效!

这种行为是否是因为我的“第二只”狗在某种程度上是一个托管实例,从数据库中取出,而在第一个例子中,该对象是不受管理的?

这是JDO特有的行为吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

在上面的代码中,当我运行它时,确实会对数据存储区中的名称进行更新。事实上,当您查看日志时,您会看到一个非常明确的INSERT for persist然后是UPDATE,除非在您获得具有最新name值的单个INSERT时使用乐观txns。