美好的一天,
我的代码如下(我正在使用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/