Знайте, что есть много вопросов об этом. Это вызвано тем, что строка данных обновляется другим потоком, а другой поток не может получить блокировку.
Тем не менее, я пытаюсь спросить более подробно:
У меня есть следующий код:
// catch all for hibernate super exception
public SystemErrorCode map(final org.hibernate.JDBCException dae) {
log.info( "dae : " + dae );
log.info( "dae error code : " + dae.getErrorCode( ) );
log.info( "dae sql : " + dae.getSQL( ) );
log.info( "dae sql exception : " + dae.getSQLException( ) );
log.info( "dae sql state : " + dae.getSQLState( ) );
log.info( "dae cause : " + dae.getCause( ) );
log.info( "dae message : " + dae.getMessage( ) );
return new SystemErrorCode( "DAO0005", SYSTEM_DAO );
}
А вот и журнал:
dae : org.hibernate.exception.LockAcquisitionException: could not execute native bulk manipulation query
dae error code : -911
dae sql : update PHistory SET currentStatus = :currentStatus , MODIFIEDDATETIME = CURRENT TIMESTAMP where pHistoryId = :pHistoryId
dae sql exception : com.ibm.db2.jcc.am.SqlTransactionRollbackException: DB2 SQL Error: SQLCODE=-911, SQLSTATE=40001, SQLERRMC=68, DRIVER=3.65.110
dae sql state : 40001
dae cause : com.ibm.db2.jcc.am.SqlTransactionRollbackException: DB2 SQL Error: SQLCODE=-911, SQLSTATE=40001, SQLERRMC=68, DRIVER=3.65.110
dae message : could not execute native bulk manipulation query
Когда я проверяю код, на самом деле нет другого потока для обновления той же записи, потому что pHistory является основным и уникальным.
Тем не менее, я продолжаю использовать эту вещь в производстве, и я не могу имитировать ее в своем локальном или SIT или UAT. Я пытаюсь узнать, в каком потоке или откуда мой код, я на самом деле блокирую ту же строку, а затем вызываю эту ошибку.