View Merge中的Java Hibernate会话失去了变化?

时间:2013-07-11 12:20:13

标签: java hibernate merge zk open-session-in-view

我有一个Hibernate APP我们正在尝试用ZK实现Open Session in View Pattern我有一个问题Hibernate为每个线程创建一个会话并关闭它但我们在一个会话中使用[criteria和save或update]方法进行多次操作我们开始使用更新方法实现我们很快收到了臭名昭着的

NONUNIQUEOBJECTEXCEPTION 

如果以下情况,我们已将update()更改为merge()我的问题。

如果我有一个Student课程,并尝试使用update[making sure is not in session avoid the exception]更新学生,但稍后在其他方法中,学生需要以与之前的update不同的方式再次更新应调用mergingmerge()方法。我想知道什么时候调用[flush][commit]方法,第一个学生的变化是亏损?这两个学生的变化还可以吗?会发生什么?

我担心第一个student的变化是损失!在这种情况下我该怎么办?

非常感谢你们。

1 个答案:

答案 0 :(得分:0)

你应该看看锁定算法。有两个受欢迎的:乐观和悲观。对于Web应用程序,乐观锁定通常更好。长话短说实体对象的每个版本都有一个版本标签(通常是bigint或字符串db列)。当有人抢占您的更新并且您的版本变得陈旧时,hibernate会抛出乐观的锁定异常,在这种情况下,您可以捕获并询问用户该做什么(或采取其他适当的措施)