У меня проблема с тупиком на MS SQL Server. Тот же код работает без проблем на MySQL.
Моя проблема заключается в том, что я получаю запрос на удаление задания (которое подключено к устройству), а после этого я получаю запрос на создание новой работы для того же устройства. В большинстве случаев это работает без проблем, но время от времени запрос на удаление не завершается, когда я получаю запрос на создание нового задания для устройства, и именно здесь я захожу в тупик.
Приложение работает на JBoss, и я получаю запросы из очереди сообщений.
Я обнаружил, что, возможно, смогу решить проблему на MSSQL с помощью ключевого слова rowlock, но как мне включить это при использовании именованных запросов и одновременной поддержке MySQL?
Или есть какой-нибудь другой способ, которым я мог бы гарантировать, что один запрос завершается перед выполнением следующего запроса для того же устройства?
Трассировка стека с удалением некоторых частей выглядит следующим образом:
2009-08-11 10:03:22,621 WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: 1205, SQLState: 40001
2009-08-11 10:03:22,621 ERROR [org.hibernate.util.JDBCExceptionReporter] Transaction (Process ID 200) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
2009-08-11 10:03:22,621 ERROR [org.hibernate.event.def.AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.LockAcquisitionException: could not delete: [dme.dm.device.Task#131]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:82)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
---cut cut cut---
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Transaction (Process ID 200) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
---cut cut cut---