[英]Using JOOQ, how do you map an SQLException to a business exception?
我正在使用JOOQ,並希望將某些SQLExceptions映射到業務異常。 異常處理文檔頁面說:
以下關於執行偵聽器文檔的部分意味着覆蓋jOOQ的異常處理,如果您希望單獨處理某些類型的約束違規,或者您從數據庫中引發業務錯誤等。
但是, 關於執行偵聽器的頁面上沒有實際的例子。
我知道我必須實現ExecuteListener
的方法exception(ExecuteContext)
,但是我不清楚是否應該從那里throw
另一個異常,或者使用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
替代異常,那么為SQLException
自動和全局轉換選擇ExecuteListener
的路徑很有用 - 例如Spring的DataAccessException
用於進一步處理( 這里是示例轉換器 )。 它不適合自動將約束違規異常重新連接到特定的“業務異常”,因為ExecuteListener
(作為全局actor)不知道可能在什么情況下發生約束違規。 可能有:
我擔心,你必須單獨為每個查詢做出決定。 ExecuteListener
僅幫助您重新連接異常處理的技術部分。
你引用了手冊:
或者如果您從數據庫中引發業務錯誤
這些業務錯誤可能是您從數據庫觸發器引發的用戶定義的錯誤,例如,如果您不會受到約束沖突,但直接來自數據庫會產生有意義的業務錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.