gpt4 book ai didi

java - 使用 JOOQ,如何将 SQLException 映射到业务异常?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:10:57 25 4
gpt4 key购买 nike

我正在使用 JOOQ,并希望将某些 SQLExceptions 映射到业务异常。 exception handling文档页面说:

The following section about execute listeners documents means of overriding jOOQ's exception handling, if you wish to deal separately with some types of constraint violations, or if you raise business errors from your database, etc.

然而,关于 the page about execute listeners没有实际例子。

我知道我必须实现 ExecuteListener 的方法 exception(ExecuteContext),但我不清楚是否应该抛出另一个异常从那里开始,或者改用 ExecuteContext.exception 方法来覆盖现有的异常。例如。

@Override
public void exception(ExecuteContext ctx) {
if (ctx.sqlException().getSQLState().equals("23503")) {
throw new ForeignKeyViolationException("Foreign key violation", ctx.sqlException());
}
}

或者:

@Override
public void exception(ExecuteContext ctx) {
if (ctx.sqlException().getSQLState().equals("23503")) {
ctx.exception(ForeignKeyViolationException("Foreign key violation", ctx.sqlException()));
}
}

最佳答案

恐怕,您必须自己完成这项工作。这就是为什么......

使用 ExecuteListener 对你不起作用

如果您想要 jOOQ 的 DataAccessException 的替代异常,选择 ExecuteListener 以自动和全局翻译 SQLException 的方法很有用。 - 例如 Spring 的DataAccessException用于进一步处理(example translator here)。它不适合自动将违反约束的异常重新连接到特定的“业务异常”,因为 ExecuteListener(作为全局参与者)不知道在什么上下文中可能发生约束违反。可能有:

  • 导致违反约束的错误(例如,您应该更新而不是插入)
  • 导致违反约束的用户错误(例如,用户两次提交表单)
  • 导致违反约束的实际业务规则(例如检查约束)

恐怕您必须针对每个查询分别做出决定。 ExecuteListener 仅帮助您重新连接异常处理的技术部分。

手册中为什么提到“业务错误”?

你引用了手册:

or if you raise business errors from your database

这些业务错误可能是您从数据库触发器引发的用户定义的错误,例如,在这种情况下您不会收到约束冲突,而是直接从数据库中收到有意义的业务错误。

关于java - 使用 JOOQ,如何将 SQLException 映射到业务异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45238949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com