【问题标题】:Does Hibernate update an entity that has not changed?Hibernate 是否更新未更改的实体?
【发布时间】:2010-11-27 20:33:52
【问题描述】:

给定一个未更改的实体,Hibernatesession.update(entity) 是否会向数据库服务器发送 SQLUPDATE 语句?

例如,在下面的代码中,Hibernate 是否会向数据库服务器发送 SQL UPDATE

Session session = factory.openSession();
Person me = new Person(null, "Derek Mahar");
session.save(me);
Person me2 = new Person(me.getId(), "Derek Mahar");
session.update(me2);
session.flush();

【问题讨论】:

  • 即使对象仍附加到会话,更新是否也有效? update() 的 API 告诉它使用给定的分离实例更新持久实例。
  • 克拉夫坦,我想你可能是对的。根据文档,此示例将引发异常。我将修改该示例,使其更新一个与原始实例具有相同 ID 的分离实例。
  • cherouvim,不完全是一个测验。这是关于Hibernate更新操作效率的问题。
  • 这可能是一个基本问题,但你会惊讶于我见过多少次代码首先将它刚刚从数据库中读取的持久实体与新构造的分离对象进行比较,如果它们不同,则尝试调用 session.update(detached) 以(最终)将分离的对象持久保存到数据库中。

标签: java sql hibernate


【解决方案1】:

没有。严格来说,Hibernate 不会在update 上发送 SQL 更新。 update 只是更新当前会话中的对象。当会话刷新时,Hibernate 会执行查询。

【讨论】:

  • Bozho,你是对的,但我的问题是假设上次更新后会话刷新。不过,我的问题并没有明确说明这一点,因此我修改了代码示例以包含明确的最终 flush()
  • 我的回答是(现在仍然是)“不”,其余的是附加信息 :)
猜你喜欢
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多