【发布时间】: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)以(最终)将分离的对象持久保存到数据库中。