【问题标题】:Java Hibernate Session in View Merge loses Changes?View Merge 中的 Java Hibernate 会话丢失更改?
【发布时间】:2013-07-09 17:11:00
【问题描述】:

我有一个 Hibernate APP,我们正在尝试使用 ZK 实现 Open Session in View Pattern 我有一个问题 Hibernate 为每个线程创建一个会话并关闭它,但是我们在一个会话中使用 [标准和保存或更新] 方法进行了多个操作使用更新方法来实现我们很快就收到了臭名昭著的

NONUNIQUEOBJECTEXCEPTION 

我们已将update() 更改为merge() 我的问题是否如下。

如果我有一个Student 班级并尝试使用update[making sure is not in session avoid the exception] 更新学生,但后来在其他方法中,学生需要再次更新,不同于以前的update 这次我们应该merging 和@ 987654329@ 方法被调用。我想知道何时调用[flush][commit] 方法对第一个学生的更改是损失?两个学生的变化都可以吗?会发生什么??

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

非常感谢您的问候。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢提示 gerrytan 先发制人是什么意思?
    • 说 2 人正在获取相同版本的实体对象,但其中一个人先保存他/她的更改,然后这个人抢占了另一个人。这就是锁定技术有用的地方
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2015-02-17
    • 2012-09-28
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 2013-01-19
    相关资源
    最近更新 更多