【问题标题】:Handle Simultaneous database updates in Java +hibernate在 Java +hibernate 中处理同时数据库更新
【发布时间】:2015-03-03 22:05:35
【问题描述】:

您好,我正在处理一个项目,当 2 个用户在同一个屏幕上处理相同的订单时,我必须处理一个案例。如果用户 1 先提交或更新订单,那么我不希望用户 2 提交相同的订单,而是警告他这些订单已经提交,然后刷新页面。你们认为这是否是正确的方法,以及我如何在 Java 和休眠中实现它?

【问题讨论】:

    标签: java database hibernate concurrentmodification


    【解决方案1】:

    Hibernate 中有Version 的概念。或者所谓的optimisting locking

    每个实体都有一个版本字段。即,每个表中的一列用于存储此版本。将实体保存到数据库时,休眠将处理 vrsioning。如果有任何东西关闭,它将引发异常。

    @Entity
    public class Flight implements Serializable {
    ...
        @Version
        @Column(name="OPTLOCK")
        public Integer getVersion() { ... }
    }  
    

    参考号:http://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch05.html#d0e2225

    【讨论】:

    • 哦,谢谢。您认为在这种情况下也可以使用拦截器或事件侦听器吗?
    • @jimmyreddevil 我想是的,但是,除了将实体中的版本作为分离对象发送给客户端,当客户端保存分离对象时将其发送回休眠 sessoin 以保存它(在往返过程中保持版本完整)。保存时,hibernate会比较DB中的值与分离对象的值,如果有任何差异,它会抛出异常。
    猜你喜欢
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多