- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 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()));
}
}
最佳答案
恐怕,您必须自己完成这项工作。这就是为什么......
如果您想要 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/
我是一名优秀的程序员,十分优秀!