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

标签 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
    ...
}

最佳答案

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

  • EntityExistsException
  • EntityNotFoundException
  • NonUniqueResultException
  • 没有结果异常
  • OptimisticLockException
  • 回滚异常
  • TransactionRequiredException

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

例如:

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

EntityExistsException 可能是您想要捕获的异常,以查明您尝试保留的对象何时已存在:

Thrown by the persistence provider when EntityManager.persist(Object) is called and the entity already exists.

关于java - 如何从 JPA 中的持久性异常中获取不同类型的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25119957/

相关文章:

java - 从圆心找到一个点的角度

java - Room迁移仅在多个表的主键上添加@NonNull注释

php - 捕获接口(interface)异常。

java - catch block 异常终止?

c# - 无效的ID应该抛出什么异常?

java - 如何向自定义 Magnolia CMS 模板添加导航?

java - 如何洗牌由二维数组组成的牌组

java - 返回无效引用参数值

entity-framework - 无法解析符号“ForSqliteHasDefaultValueSql”

sql - 如何将单个字段转换为SQLite日期以计算工作日?