当前位置: 首页 > 知识库问答 >
问题:

JPA实体管理器合并,对象中没有任何更改

卫华奥
2023-03-14
id             DECIMAL(11) NOT NULL,
name           CHAR(20) NOT NULL, 
lastModified   TIMESTAMP NOT NULL FOR EACH ROW ON UPDATE AS ROW CHANGE TIMESTAMP
{id: 1, name: "example", lastModified: 2019-05-22 16:24:54.771}
Person person = em.find(Person.class, 1)
person.setName("example")
em.merge(person)
Person person = em.find(Person.class, 1)
person.setName("new name")
em.merge(person)

有什么能帮上忙的吗?有人能解释一下为什么没有对对象进行更改时行不更新吗?:)谢谢!

共有1个答案

乐正浩言
2023-03-14

使用merge时,Hibernate首先在试图合并的元组中运行一个Select语句。执行此select以获取元组的最新状态,然后使用元组中已更改的数据在数据库中运行更新。

正如您在示例中所说的,您没有更改任何数据,因为您正在尝试将名称更新为与以前相同的名称,因此hibernate不会对数据库运行任何更新。

您可以参考Hibernate Dirty Checking Mechanism阅读更多关于它的信息。

 类似资料:
  • 我试图使用spring boot将EntityManager注释注入到我的DAO中,但是得到一个< code > InvalidDataAccessApiUsageException 消息,说没有可用的事务EntityManager。我的印象是,只要Spring Boot从< code>application.yml中获得了我的数据源信息,并且我用< code>@PersitenceContext

  • 在我的DAO类中,假设我有实体管理器'em'是由实体管理器工厂制作的,之后的代码如下所示:- 当我执行上面的代码行时,在堆内存中创建了一个对象,并在其中存储了其实例变量“xyz”的值。 在第3行之后,如我们所知,carEntity对象进入托管状态。它将不会转到数据库,直到我刷新或提交事务。 那么实体管理器如何知道一个实体已经进入托管状态呢?执行后,是否为CarEntity创建了一个新对象?或者它在

  • 我已经尝试使用Spring Boot+Spring Data JPA更新实体很久了。我得到所有正确的观点回到我。我的编辑视图按ID向我返回正确的实体。一切进展顺利。直到我实际尝试保存/合并/持久化对象。每次我拿回一个有新ID的新实体。我只是不知道为什么。我看了网上的例子,还有你可能会参考的重复问题的链接。那么,在这些代码中,我在哪里犯了错误呢? 在这段代码之后。我的视图将我返回到正确的URL,但I

  • 在我的实际应用程序中,我有一个业务层,它根据一些业务规则使用JPA来持久化数据,问题是camel JPA事务没有与业务层事务共享。我需要业务类中的EntityManager与Camel事务范围集成,我该怎么做? 下面是一个简单的例子,但这反映了实际设计中的问题。 项目实例 服务级别 骆驼路线 骆驼背景。xml

  • 我有一个通用的JPA存储库实现,处理以下多种类型的实体: 在某个时候,我意识到一些实体还没有被删除。然后,我发现一些实体导致删除的取消,如下所述:https://stackoverflow.com/a/16901857/502059 由于该方法是通用的,因此它包含各种类型的实体。作为一种解决方法,我想摆脱导致取消删除的实体,并在 方法的开头添加了 虽然这有效,但我觉得这是一个肮脏的解决方法。 所以

  • 但问题是这将只锁定一行,而我想在计算总行数时锁定整个表(实体)。 请指教。