Seam / Hibernate - 获取 ORA 消息文本

发布于 2024-10-09 14:14:43 字数 801 浏览 5 评论 0原文

    try {
        if (schId != null) {
            log.info(">>> save");
            schedule = em.merge(schedule);

            em.persist(schedule);
        } else {
            em.persist(schedule);
        }

        em.flush();
        ret = "ok";
    } catch (Exception err) {
        ret = err.getMessage();
        err.printStackTrace();

        facesMessages.addFromResourceBundle(Severity.ERROR, "databaseError", ret);
    }

当我有重复的键错误 err.getMessage() returns org.hibernate.exception.ConstraintViolationException: Could notexecute JDBC batch

在堆栈跟踪中也存在此错误: java.sql.BatchUpdateException: ORA-00001: 违反了唯一约束 (ACM.SCH_UK)

如何以字符串形式获取此 ORA-00001 消息,而不是 org.hibernate.exception。 ConstraintViolationException 文本?

    try {
        if (schId != null) {
            log.info(">>> save");
            schedule = em.merge(schedule);

            em.persist(schedule);
        } else {
            em.persist(schedule);
        }

        em.flush();
        ret = "ok";
    } catch (Exception err) {
        ret = err.getMessage();
        err.printStackTrace();

        facesMessages.addFromResourceBundle(Severity.ERROR, "databaseError", ret);
    }

When I have duplicate key error err.getMessage() returns org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch

In the stacktrace there is this error too:
java.sql.BatchUpdateException: ORA-00001: unique constraint (ACM.SCH_UK) violated

How can I get this ORA-00001 message as a string, instead of the org.hibernate.exception.ConstraintViolationException text?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

与他有关 2024-10-16 14:14:43

java.sql.BatchUpdateException 是导致 PersistenceException 的根本原因,您可以按如下方式提取它:

public static Throwable getRootCause(Throwable ex) {
    while (true) {
        Throwable cause = ex.getCause();
        if (cause == null) return ex;
        ex = cause;
    }
}

ret = getRootCause(ex).getMessage();

java.sql.BatchUpdateException is the root cause of your PersistenceException, you can extract it as follows:

public static Throwable getRootCause(Throwable ex) {
    while (true) {
        Throwable cause = ex.getCause();
        if (cause == null) return ex;
        ex = cause;
    }
}

.

ret = getRootCause(ex).getMessage();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文