java hibernate标准在某人读取时锁定db2表

标签 java hibernate db2 locking criteria

美好的一天,

我的代码如下(我正在使用org.hibernate.Criteria):

Criteria criteria = getSession( ).createCriteria(
                JSNumber.class );
        criteria.add( Restrictions.eq( "paymentDate", mnight ) );
        JSNumber result = (JSNumber) criteria
                .uniqueResult( );

这将从数据库返回一个整数。

获取值后,我会将数字更新+1:

int newNo = result.getRunningNo( ) + 1;
            result.setRunningNo( newNo );
            getSession( ).merge( result );
            getSession( ).flush( );

执行+1是因为我的这个数字在下次尝试再次获取该值时再次是唯一的。

但是,我有一个问题: 当时间几乎相同时,就在毫秒之内,两个请求从/到此表获取结果/更新时,它可能会为两个用户请求返回相同的结果。

例如, 第一个请求位于 14:47:36.735,第二个请求位于 14:47:36.737 第一个请求获取值 = 110,它将更新为 111。 但在第一个请求更新值之前,第二个请求已经获取了该值,也是 110。

任何锁定表以防止其他请求访问该表的想法。

最佳答案

如果您调整数字生成过程以使用数据库 sequence DBMS 中的对象,它将保证每个请求都会获得唯一的编号,无论下一个请求到达的速度有多快。

关于java hibernate标准在某人读取时锁定db2表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31261186/

相关文章:

java - 当另一个 JButton 被按下时添加一个 JButton

java - 自动出现 JTextField

java - 使用条件在 Hibernate 中进行多对一搜索

java - 标准、独立子查询、分组依据和拥有更多

IBM Db2 中 if 存在的语法

java - JMS 消息监听器调用程序失败,原因 : Identifier contains invalid JMS identifier character '-' : 'x-request-id'

java - 在 hibernate 中存储键值对 |我们可以使用 map 吗?

java - 为什么hibernate/ehcache二级缓存在同一个 session 中总是丢失?

java - 如何通过 Java 中的 DatabaseMetadata api 检索 DB2 中的实际存储过程代码

java - Hibernate 在多对多列表上创建别名