从EJB内部的IllegalArgumentException检索org.postgresql.util.PSQLException的原因是否可能?

时间:2016-01-14 16:30:53

标签: java hibernate exception-handling ejb

我有一个使用EJB3的项目,当代码抛出与SQL相关的异常时,它会向开发团队发送通知。 因此,例如,使用此代码:

Query q = getEntityManager().createNativeQuery(query);
List<Object[]> results = q.getResultList();

如果我发出语法错误,我会捕获发送给devs的第一个异常java.lang.IllegalArgumentException: Parameter with that position [2] did not exist。 在Eclipse内部,我可以看到其他异常,例如javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet,最后最后一个带有我想要捕获的消息Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near "AND"。有没有办法获得更多详细信息? 我可以看到抑制异常数组是空的。

更新:如果我直接在org.postgresql.util.PSQLException中插入catch,Eclipse会说:

  

此异常永远不会从try语句主体

中抛出

1 个答案:

答案 0 :(得分:0)

您在Eclipse stracktrace中看到的异常是存储在IllegalArgumentException中的异常,形成一系列错误原因。

您可以通过遍历此原因链来获取postgres异常:

catch(IllegalArgumentException e) {
    Throwable t = e;
    while (t != null)
    {
        if (t instanceof PSQLException) {
              PSQLException pe = (PSQLException)t;
             // analyse the exception
             break;
        }
        t = t.getCause();
    }
}