到目前为止,我已经避免了将特定MySQL异常捕获为MySQLIntegrityConstraintViolationException
等等的问题。但现在我需要它告诉用户他违反了约束并且应该选择不同的字符串键。我试图通过使用instanceof
运算符来捕获特定的异常,因为Glassfish将它包装在EJBException
中。但到目前为止我还没有成功。
是否有人使用正确的代码/模式来捕获应用程序容器中的特定SQL异常,如Glassfish?
最诚挚的问候克里斯。
PS。我正在使用Glassfish 3.1和JPA 2.0
答案 0 :(得分:1)
对于大多数数据库访问框架,库或API,无法预测会导致失败的所有场景。
在JPA中,API中存在例外情况,这些例外映射到遇到故障的常见故障。这些异常中的大多数是PersistenceException
类的实例,或者是EntityExistsException
,EntityNotFoundException
,NonUniqueResultException
等子类。您可以捕获这些特定异常并发出相应的错误消息。
您也可以使用Bean Validation API来验证JPA实体的状态,然后再保留它们,这样就可以减少捕获异常的可能性,这些异常需要不同的错误消息,并由此产生纠正措施。用户。