【问题标题】:Hibernate updating my entities休眠更新我的实体
【发布时间】:2018-10-24 03:33:33
【问题描述】:

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

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

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

【问题讨论】:

  • 这是 hibernate 或任何其他 orm 的主要功能之一,请阅读有关 hibernate 缓存或持久性上下文的信息。简短的回答:您对从 Db 检索的实体所做的任何更改都会在事务结束时反映到 Db。是的,有多种方法可以避免它。
  • 喜欢清除缓存或选择投影而不是实体。或者干脆避免对您的“托管”实体进行更改
  • 我会试试@Transactional(readOnly=true)
  • @Zeromus 当我从我的数据库自动分离返回任何东西时,有可能吗? @Transactional(readOnly=true) 不起作用

标签: hibernate spring-boot jpa


【解决方案1】:

你已经得到了 cmets 中的碎片,但让我把它们放在一起回答:

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

这个解释是正确的。

如果您通过 JPA 加载实体,它会附加到会话中,并且一旦您关闭会话/提交事务,就会跟踪对它的每次更改并将其写入数据库。

为了避免您需要从会话中删除实体。你可以这样做

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

【讨论】:

猜你喜欢
  • 2013-07-24
  • 2020-02-16
  • 2019-06-22
  • 1970-01-01
  • 2016-12-20
  • 2011-12-15
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
相关资源
最近更新 更多