首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >捕获JSF中的唯一约束异常

问捕获JSF中的唯一约束异常
EN

Stack Overflow用户
提问于 2014-12-16 19:38:00
回答 1查看 483关注 0票数 0

我在数据库中有一个带有唯一约束的列"name“。我正在尝试处理数据库异常,捕捉它,并返回用户友好的消息给用户。

问题出在异常类型上。异常的原因是

代码语言:javascript
复制
org.postgresql.util.PSQLException

但是当我得到异常(最大的异常是javax.ejb.EJBTransactionRolledbackException)时,它不能被识别为PSQLException。

在一些研究之后,我发现了这一点,并试图解释为什么我得不到"PSQLException“,所以我放了一个这样的代码:

代码语言:javascript
复制
//code with saving row to database
} catch (javax.ejb.EJBTransactionRolledbackException e) {
    try {
        int a = ((PSQLException)TisUtil.getRootError(e)).getErrorCode();
        addMessageWarn("That name already exists");
    } catch (Exception ex) {
        addmessageError(ex);
    }
} 

我们的目标是了解为什么Java不能捕获PSQLException。因此,程序进入EJBTransactionRolledbackException一节。GetRootError方法找到了PSQLException的根本原因,但它无法对其进行强制转换。

Exception ex看起来像这样:

代码语言:javascript
复制
ClassCastException", detailMessage: "org.postgresql.util.PSQLException cannot be cast to org.postgresql.util.PSQLException".

我用的是Jboss,wildfly 8.0,Persistance 2.0,PostgreSQL。

EN

回答 1

Stack Overflow用户

发布于 2014-12-16 22:40:11

看起来您可能正在使用JTA或EJB3事务管理。

这在JDBC异常之上定义了一个层。您无法捕获JDBC异常,因为它们是由EJB3异常包装的。要了解更多信息,请阅读EJB3、JTA和EJB事务。

您必须解包并检查异常,这是Java非常不擅长的。像Apache ExceptionUtils这样的工具提供了很多帮助,因为它们可以沿着异常树查找特定的异常类。

不能保证任何PSQLException都是根;可能会有一个java套接字异常或其他东西作为根,并用一个PSQLException包装它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27503766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档