检查 org.jooq.exception.DataAccessException 是否序列化失败



I get a org.jooq.exception.DataAccessException in Java 并附有一条消息

错误:由于事务之间的读/写依赖关系,无法序列化访问 详细信息:原因代码:在检查冲突期间,在标识为枢轴时取消。 提示:如果重试,事务可能会成功。

我想检查数据访问异常的错误代码,这是后台的 Postgres 数据库。例如,序列化失败异常错误代码为 40001。

如何检查 org.jooq.exception.DataAccessException 的错误代码?

我的动机是如果序列化失败,则重试事务。

在 jOOQ 3.8 中,引入了 SQLStateClassSQLStateSubclass (#4904(,以便您键入安全访问 SQL 标准 SQL 状态值。

catch (DataAccessException e) {
    System.out.println(e.sqlStateClass());
    System.out.println(e.sqlStateSubclass());
    if (SQLStateSubclass.C40001_SERIALIZATION_FAILURE == e.sqlStateSubclass()) {
        ...
    }
}

在 jOOQ 3.8 之前,您可以访问底层SQLException以访问以下 SQL 状态值:

catch (DataAccessException e) {
    if (e.getCause() instanceof SQLException &&
       ("40001".equals(((SQLException) e.getCause()).getSQLState()))) {
        ...
    }
}

最新更新