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

Java 如何从JPA中的持久性异常中获取不同类型的错误?,java,sqlite,exception,jpa,eclipselink,Java,Sqlite,Exception,Jpa,Eclipselink,如何区分导致异常的错误?我想根据我得到的错误类型做出不同的事情。大概是这样的: 试试看{ entityManager.getTransaction().begin(); entityManager.persist(实体); entityManager.getTransaction().commit(); }catch(PersistenceException异常){ 如果(重复记录) //做点什么 else if(某些值为空) //做点什么 否则如果(某些值超出范围) //做点什么 ... }

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

试试看{
entityManager.getTransaction().begin();
entityManager.persist(实体);
entityManager.getTransaction().commit();
}catch(PersistenceException异常){
如果(重复记录)
//做点什么
else if(某些值为空)
//做点什么
否则如果(某些值超出范围)
//做点什么
...
}

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

  • 实体存在性感觉
  • EntityNotFoundException
  • 非查询结果异常
  • NoResultException
  • 乐观锁例外
  • 回滚异常
  • TransactionRequiredException
在捕获PersistenceException之前,分别捕获您关心的其中一个

例如:

try {
    ....
} 
catch (EntityExistsException exception) {
    ....
}
catch (PersistenceException exception) {
    .... 
}
EntityExistsException
可能是您想要捕获的异常,以查明您尝试持久化的对象何时已经存在:

在调用EntityManager.persist(对象)且实体已存在时由持久性提供程序引发


好的,那太好了,我会用的。但我有一个疑问,你怎么能捕捉到数据库中触发器引发的异常?@ivan0590这是一个单独的问题,我不知道答案。好吧,那我再问一个新问题。非常感谢你帮助我这样的新手;)