尝试从表中更新记录行时点击此按钮。
org.hibernate.exception.LockAcquisitionException: could not execute native bulk manipulation query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:105) ~[hibernate-core-3.3.1.GA.jar:3.3.1.GA]
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) ~[hibernate-core-3.3.1.GA.jar:3.3.1.GA]
at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:198) ~[hibernate-core-3.3.1.GA.jar:3.3.1.GA]
at org.hibernate.impl.SessionImpl.executeNativeUpdate(SessionImpl.java:1190) ~[hibernate-core-3.3.1.GA.jar:3.3.1.GA]
at org.hibernate.impl.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:357) ~[hibernate-core-3.3.1.GA.jar:3.3.1.GA]
这是我的java代码:
@Override
public void updateCurrentStatus(Long paymentHistoryId, String currentStatus) {
StringBuilder sb = new StringBuilder( );
sb.append( "update PaymentHistory SET " );
sb.append( " currentStatus = :currentStatus ," );
sb.append( " MODIFIEDDATETIME = CURRENT TIMESTAMP " );
sb.append( "where paymentHistoryId = :paymentHistoryId " );
final Query updateQuery = getSession( ).createSQLQuery( sb.toString( ) );
updateQuery.setString( "currentStatus", currentStatus );
updateQuery.setLong( "paymentHistoryId", paymentHistoryId );
updateQuery.executeUpdate( );
}
PaymentHistory是一个实体,paymentHistoryId是主键。
因此,我相信我的方法只会更新一个PaymentHistory表的记录。
我相信原因代码68不是死锁,它的锁超时。如果有多个请求同时更新同一行记录,则会发生这种情况。
如果我可以确保没有2个请求更新此记录,还有其他任何理由来获取此异常吗?
我的db2版本是DB2 / AIX64 10.5.9