2010-09-28 3 views
1

Невозможно поймать оптимистическое исключение блокировки.как повысить OptimisticLockException

один способ поднять OptimisticLockException является использование em.flush()

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

, но я не думаю, что это лучший beacuse решение в этой полной базе данных находится на одном уровне.

другая работа вокруг ловя EJBException и найти RollBackException в том, что ..

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

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

Пожалуйста, помогите у вас есть какие-либо другие идеи или скажите мне, какой путь лучше.

+0

Почему вы хотите поднять конкретное исключение, похожее на то, что приложение не должно подниматься? Но если вы решите, что это уместно, вы можете не просто «бросить новый OptimisticLockException()» в свой код? –

+0

Я не понимаю вопроса. Чего вы пытаетесь достичь? –

ответ

0

Я думаю, что первый способ - разумный способ, если вы хотите поймать OptimisticLockException и обновить свои данные или повторить операцию. Что касается второго способа, если текущая транзакция неактивна, то не генерируется исключение RollbackException.

0
try 
{ 
    getEntityRepository().update("Some Persistence Obj"); 
} 
catch (EJBException e) 
{ 
    if (e.getCause() instanceof OptimisticLockException) 
    { 
     // code goes here 
    } 
}