如果对象被管理,则其状态将被跟踪,并且对该对象所做的任何更改将作为脏检查的一部分自动在数据库中更新,因此为什么update
或{{1需要方法吗?
如果我们尝试保存分离的对象并且该对象与会话相关联,为什么update和saveOrUpdate方法抛出异常?
答案 0 :(得分:1)
为什么需要更新或saveOrUpdate方法?
您的问题的第二部分回答了第一部分:这些方法用于更新分离的对象,其状态为而不是由Hibernate跟踪。
如果我们尝试保存分离的对象并且该对象与会话相关联,为什么update和saveOrUpdate方法抛出异常?
因为Hibernate提供了一个保证(这对它自己的正确行为至关重要):在一个会话中,只能有一个给定实体的实例。由于update()和saveOrUpdate()采用一个分离的实体并使其附加,如果会话中已经存在该实体的附加版本且Hibernate没有抛出异常,那么最终会有两个附加的实例同一会话中的同一实体。这将打破Hibernate的保证。如果user1和user2是具有ID 42的用户的两个附加实例,将会发生什么:
user1.setName("Foo");
user2.setName("Bar");
现在提交事务:用户名应该是什么?