我创建了 2 个实体。现在,当我在后端检索我的实体时,我会验证一些事情,但是当我的后端将这些实体返回给我的前端时,hibernate 会尝试自动更新数据库。
我实际上并没有在我的后端代码中运行任何更新(我认为这是因为我在执行逻辑时更改了实体中的一些数据并删除了一些我应该返回到前端的属性)。
在我明确运行 .save 或 .update 之前,如何告诉休眠状态不更新任何内容?
你已经在评论中得到了这些片段,但让我把它放在一起回答:
我认为这是因为我在执行逻辑时更改了实体中的一些数据
这种解释是正确的。
如果您通过 JPA 加载一个实体,它会附加到一个会话,并且一旦您关闭会话/提交事务,它的每一个更改都会被跟踪并写入数据库。
为了避免您需要从会话中删除实体。你可以通过以下任一方式做到这一点
从持久化上下文中分离实体:https : //docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#detach-java.lang.Object-
在进行操作之前关闭 EntityManager / 事务。这基本上意味着对最外层方法之外的实体进行更改@Transactional
请注意,在这两种情况下,延迟加载都不再起作用,因此您必须确保在分离实体之前加载了所需的所有内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句