我在我的应用程序中使用EJB和hibernate。在某些情况下,我应该有一个像UPDATE MY_TABLE SET VALUE = VALUE + 1 WHERE MY_KEY=20;
这样的本机SQL查询(在同一事务中还有一些其他的hibernate操作可用,但那些操作不在同一个表中)。并且相同的查询将有机会在另一个事务中运行,这意味着单独的线程将尝试与其他一些hibernate操作一起运行相同的UPDATE查询。当单个线程处于运行状态时,每个事情都很好但在多线程场景中我得到以下异常
org.hibernate.exception.LockAcquisitionException: could not execute native bulk manipulation query
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:105)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:198)
at org.hibernate.impl.SessionImpl.executeNativeUpdate(SessionImpl.java:1191)
at org.hibernate.impl.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:357)
at x.y.z.myMethod(MyClass.java:154)
我无法将线程缩减为1.我的隔离级别为READ_UNCOMMITTED
。为什么我得到这个例外?线程竞赛中发生了什么?有解决方案吗怎么解决?