0

这是我的场景(我使用的是 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 的行为吗?

谢谢!

4

1 回答 1

0

在上面的代码中,名称的更新确实存在于数据存储中......当我运行它时。实际上,当您查看日志时,您会看到一个非常清晰的 INSERT 用于持久化,然后是一个 UPDATE,除非在您获得具有最新名称值的单个 INSERT 时使用乐观 txns。

于 2012-04-12T14:16:53.903 回答