2011-11-04 66 views
0

根据hibernate doc(在http://docs.jboss.org/hibernate/core/3.5/javadoc/org/hibernate/Session.html#update(java.lang.Object))更新方法 void update(Object object)在此处引发HibernateException对象,因为参数被认为处于分离状态。但我尝试了一些例子,其中 传入的对象可以是所以我做的是作为参数在update方法中传递的对象可以处于持久状态还是分离状态?

person = (Person)session. get(Person.class,1); 
person.setName("scott"); 
// At this point of time person is in persistent stage as it has adentifier attached to it and also attached to session. 
session.update(person); 

它成功更新。 因此,根据我的理解,传递对象作为参数更新方法可以处于持久状态或分离状态吗?

回答

0

因此,根据我的理解传递对象作为参数在更新方法 可以处于持久状态或分离状态吗?

是的,你可以通过持久化对象或分离对象的update()。但update()只对分离的对象有影响。在永久对象上调用update()是冗余什么都不做,因为对象已经是持久的,它的状态将在刷新期间自动同步到数据库。因此,从您的代码中,人名可以更新为scott,这是由于刷新,但不是由于update()。您可以通过删除update()来证明它,并且名称仍可更新为scott

update()只影响分离的对象,这可以使分离的实例持久化并由hibernate会话管理。

-1

这很奇怪。我的update()文档是:

使用给定的 分离实例的标识更新持久实例。如果存在具有相同 标识符的持久实例,则会引发异常。如果关联映射到 cascade =“save-update”,则此操作将级联到 关联的实例。

所以,我不认为它适用于分离的对象。我通常先合并()它们或刷新()对象,如果它是分离的。

你是否试过通过关闭会话,打开一个新的然后更新?

+0

'update()'只有效果,它应该只在分离的对象上工作。 –

相关问题