这是我的场景(我正在使用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特有的行为吗?
谢谢!
答案 0 :(得分:0)
在上面的代码中,当我运行它时,确实会对数据存储区中的名称进行更新。事实上,当您查看日志时,您会看到一个非常明确的INSERT for persist然后是UPDATE,除非在您获得具有最新name值的单个INSERT时使用乐观txns。