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