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

kau*_*aur 3 java postgresql exception jooq

我在 Java 中收到 org.jooq.exception.DataAccessException 和一条消息

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

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

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

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

Luk*_*der 5

在 jOOQ 3.8 中,引入了SQLStateClass和( #4904 ) 来让您对 SQL 标准 SQL 状态值进行类型安全的访问。SQLStateSubclass

catch (DataAccessException e) {
    System.out.println(e.sqlStateClass());
    System.out.println(e.sqlStateSubclass());

    if (SQLStateSubclass.C40001_SERIALIZATION_FAILURE == e.sqlStateSubclass()) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

catch (DataAccessException e) {
    if (e.getCause() instanceof SQLException &&
       ("40001".equals(((SQLException) e.getCause()).getSQLState()))) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)