根据hibernate文档,下面是更新操作的定义
void update(Object object)
抛出HibernateException
使用给定分离实例的标识符更新持久性实例。如果存在具有相同标识符的持久性实例,则抛出异常。如果关联与cascade="save-update"
映射,则此操作会级联到关联的实例。
我在语句上有一个问题如果存在具有相同标识符的持久化实例,则会抛出异常。。我认为当它说如果存在具有相同标识符的持久化实例时,这意味着如果会话(我们在其中执行更新操作)已经包含具有相同标识符的持久实例,则将抛出异常。但是如果二级缓存包含具有相同标识符的持久化实例,则更新操作将更新该对象。它不会抛出任何异常对吗?
答案 0 :(得分:0)
同意。如果具有相同标识符的实例位于二级缓存中,则更新不应引发异常。
你突出显示的句子不是很清楚,但我认为你的假设是正确的。也许你可以评论http://jboss.org论坛,看看他们是否可以澄清措辞,甚至可以改进它。
答案 1 :(得分:0)
不,该语句告诉会话,而不是二级缓存。二级缓存在会话工厂级别工作,只要会话工厂处于活动状态,它就会存在。如果具有相同标识符的对象附加会话(不是第二级缓存),则仅抛出异常。如果没有,那么它将更新数据库中的对象以及二级缓存。