Hibernate 休眠更新我的实体

Hibernate 休眠更新我的实体,hibernate,spring-boot,jpa,Hibernate,Spring Boot,Jpa,我已经创建了2个实体。 现在,当我在后端检索实体时,我验证了一些东西,但是当后端将这些实体返回到前端时,hibernate会尝试自动更新数据库 我实际上没有在我的后端代码中运行任何更新(我认为这是因为我在执行逻辑时更改了实体中的一些数据,并删除了一些应该返回到前端的属性) 我如何告诉hibernate在运行.save或.update之前不要更新任何内容?您已经在注释中找到了这些内容,但让我把它们放在一个答案中: 我想这是因为我在做逻辑的时候改变了实体中的一些数据 这种解释是正确的 如果您通过JP

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

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


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

您已经在注释中找到了这些内容,但让我把它们放在一个答案中:

我想这是因为我在做逻辑的时候改变了实体中的一些数据

这种解释是正确的

如果您通过JPA加载一个实体,它将连接到一个会话,并且一旦您关闭会话/提交事务,对它的每个更改都会被跟踪并写入数据库

为了避免这种情况,您需要从会话中删除实体。你可以用任何一种方法

  • 从持久性上下文中分离实体:

  • 在执行操作之前关闭EntityManager/事务。这基本上意味着在用
    @Transactional


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

您已经在注释中找到了部分内容,但让我将其组合在一个答案中:

我想这是因为我在做逻辑的时候改变了实体中的一些数据

这种解释是正确的

如果您通过JPA加载一个实体,它将连接到一个会话,并且一旦您关闭会话/提交事务,对它的每个更改都会被跟踪并写入数据库

为了避免这种情况,您需要从会话中删除实体。你可以用任何一种方法

  • 从持久性上下文中分离实体:

  • 在执行操作之前关闭EntityManager/事务。这基本上意味着在用
    @Transactional


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

这是hibernate或任何其他orm的主要功能之一,请阅读有关hibernate缓存或持久性上下文的内容。简短回答:在事务结束时,您从Db检索的实体中所做的任何更改都会反映到Db中。是的,有多种方法可以避免它。比如清除缓存或选择投影而不是实体。或者简单地避免对您的“托管”实体进行更改可能重复的我会尝试
@Transactional(readOnly=true)
@Zeromus当我从数据库中返回任何内容时是否可能?@Transactional(readOnly=true)不工作这是hibernate或任何其他orm的主要功能之一,请阅读有关hibernate缓存或持久性上下文的内容。简短回答:在事务结束时,您从Db检索的实体中所做的任何更改都会反映到Db中。是的,有多种方法可以避免它。比如清除缓存或选择投影而不是实体。或者简单地避免对您的“托管”实体进行更改可能重复的我会尝试
@Transactional(readOnly=true)
@Zeromus当我从数据库中返回任何内容时是否可能?@Transactional(readOnly=true)不起作用我将在此处保留此链接以涵盖投影查询:我将在此处保留此链接以涵盖投影查询: