【发布时间】:2019-05-22 13:36:13
【问题描述】:
当对象没有变化时,我正在尝试使用实体管理器的合并方法来更新数据库中的对象。假设该行具有以下属性:
id DECIMAL(11) NOT NULL,
name CHAR(20) NOT NULL,
lastModified TIMESTAMP NOT NULL FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
假设我在数据库中有一个对象(我们称它为 Person),具有以下属性:
{id: 1, name: "example", lastModified: 2019-05-22 16:24:54.771}
所以 lastModified 属性是每次行发生变化时 db 都会更新的属性。
现在,当我首先获取对象,然后将人名更新为“example”(与数据库中已有的值相同),然后使用合并更新它时,lastModified 属性不会似乎在数据库中更新。即
Person person = em.find(Person.class, 1)
person.setName("example")
em.merge(person)
经过上述操作,lastModified 仍然是 2019-05-22 16:24:54.771(与之前相同)。现在,如果我会更改名称,即
Person person = em.find(Person.class, 1)
person.setName("new name")
em.merge(person)
所以现在 lastModified 也会更新。
对这个有帮助吗?有人可以解释一下为什么当没有对对象进行更改时该行不会更新? :) 谢谢!
【问题讨论】:
-
当我们调用 JPA 合并(实体)时,如果对实体所做的任何更改将被持久化到数据库中,反之亦然。因为没有对 Person 对象进行任何更改(当您将相同的名称更新为 person 对象时)。因此,它不会将条目更新到数据库中。
-
如果你想实现任何方式,你可以像这样更改 lastModifiedDate person.setLastmodifiedDate(new Date())。