一尘不染

休眠更新我的实体

spring-boot

我创建了2个实体。现在,当我在后端检索我的实体时,我会验证一些事情,但是当我的后端将那些实体返回到我的前端时,hibernate尝试自动更新数据库。

我实际上没有在后端代码中运行任何更新(我认为这是因为我在执行逻辑并删除一些应返回到前端的属性时更改了实体中的某些数据)。

我如何告诉hibernate在显式运行.save或.update之前不更新任何内容?


阅读 241

收藏
2020-05-30

共1个答案

一尘不染

您已经在评论中看到了片段,但让我将其汇总为一个答案:

我认为这是因为我在执行逻辑时更改了实体中的某些数据

这种解释是正确的。

如果您通过JPA加载实体,则该实体将附加到会话中,一旦关闭会话/提交事务,对它的所有更改都会被跟踪并写入数据库。

为了避免这种情况,您需要从会话中删除实体。您可以通过

  • 将实体与持久性上下文分离:https : //docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#detach-java.lang.Object-

  • 在进行操作之前,请关闭EntityManager /事务。这基本上意味着您对最外部方法之外的实体进行了注释@Transactional

请注意,在这两种情况下,延迟加载都不再起作用,因此,在分离实体之前,必须确保已加载了所需的所有内容。

2020-05-30