1

楽観的ロック例外をキャッチできません。

OptimisticLockException を発生させる 1 つの方法は、em.flush() を使用することです。

try{
   //some enitity
   em.flush()
  }
catch(OptimisticLockException ole){}

しかし、この完全なデータベースはフラッシュされているため、これが最善の解決策だとは思いません。

別の回避策は、その中でキャッチEJBExceptionして見つけるRollBackExceptionことです..

       try{
            // some code
        }
       catch (EJBException ex) {

          if (ex.getCausedByException().getCause().toString().
              indexOf("javax.transaction.RollbackException")!= -1){
                   // do work
              }     
          }
       }

他に考えがあるか、どちらの方法が良いか教えてください。

4

2 に答える 2

0
try
{
    getEntityRepository().update("Some Persistence Obj");
}
catch (EJBException e)
{
    if (e.getCause() instanceof OptimisticLockException)
    {
        // code goes here
    }
}
于 2013-12-11T14:42:33.410 に答える
0

OptimisticLockException をキャッチしてデータを更新するか、操作を再試行する場合は、最初の方法が合理的な方法だと思います。2 番目の方法については、現在のトランザクションがアクティブでない場合、RollbackException はスローされません。

于 2010-09-28T12:41:37.467 に答える