如何从JPA中的持久性异常中获取不同类型的错误?

时间:2014-08-04 13:34:14

标签: java sqlite exception jpa eclipselink

如何区分导致异常的错误?我想根据我得到的错误类型做出不同的事情。像这样:

try {

    entityManager.getTransaction().begin();

    entityManager.persist(entity);

    entityManager.getTransaction().commit();

} catch (PersistenceException exception) {

    if(DUPLICATE_RECORD)
        //do something about it
    else if(SOME_VALUE_IS_NULL)
        //do something about it
    else if(SOME_VALUE_IS_OUT_OF_RANGE) 
        //do something about it
    ...
}

1 个答案:

答案 0 :(得分:2)

PersistenceException有子类,您可以单独捕获,例如:

  • EntityExistsException
  • EntityNotFoundException
  • NonUniqueResultException
  • NoResultException
  • OptimisticLockException
  • RollbackException
  • TransactionRequiredException

在抓住PersistenceException之前,分别抓住您关心的其中一个。

例如:

try {
    ....
} 
catch (EntityExistsException exception) {
    ....
}
catch (PersistenceException exception) {
    .... 
}

EntityExistsException可能是您想要捕获的异常,以找出您尝试持久存在的对象何时存在:

  

当调用EntityManager.persist(Object)并且实体已经存在时,由持久性提供程序抛出。