【问题标题】:Overriding jOOQ's exception handling for UpdatableRecords覆盖 jOOQ 对 UpdatableRecords 的异常处理
【发布时间】:2013-09-22 14:15:20
【问题描述】:

我正在使用 jOOQ v2.6,因为我正在使用 SQL Server 2008 R2,并且 jOOQ v3.1 中存在导致代码生成失败的错误。 (我知道这将在 v3.2 中修复)。

来自手册:

// Create a new record
BookRecord book1 = create.newRecord(BOOK);

// Insert the record: INSERT INTO BOOK (TITLE) VALUES ('1984');
book1.setTitle("1984");
book1.store();

如果 store() 失败,则抛出 DataAccessException。在我的情况下,我只想让进程休眠,直到 CRUD 操作起作用,或者我观察到问题并进行干预。这意味着我需要将 BookRecord.store() 的每个实例包装在 try/catch 中。然后,这适用于所有 UpdatableRecords 中的所有 CRUD 操作。

是否有一种简单的方法可以处理所有生成的 Record 类型的所有 CRUD DataAccessExceptions,而不必记住一遍又一遍地实现相同的异常处理程序?

【问题讨论】:

  • 在 v3.1 中代码生成真的失败了吗?如果你是referring to this,那么我认为问题应该只是装饰性的......?
  • 我给了你这个问题的答案,就像现在一样。我认为更详细的讨论可能更适合jOOQ User Group。无论如何,有趣的想法!
  • @LukasEder 从记忆中回忆 - SQLServerDatabase.is2012() 正在返回 true。 #2624 修复它。
  • 我的错。我以为这个修复已经合并到3.1.1,但是 3.1.1 还没有发布。

标签: java sql activerecord jooq


【解决方案1】:

我不能 100% 确定这是否会满足您的实际要求,但是使用 ExecuteListener,您可以挂钩到 jOOQ 的一般查询执行生命周期,并将一些行为注入到 jOOQ 的异常处理中。这里给出了一些例子:

http://www.jooq.org/doc/3.1/manual/sql-execution/execute-listeners

特别是,您的自定义 ExecuteListener 可能如下所示:

public class MyListener extends DefaultExecuteListener {

    @Override
    public void exception(ExecuteContext ctx) {
        // Put some logic here
    }
}

注意,这目前不会阻止抛出异常本身。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 2015-12-29
    • 2020-01-23
    • 1970-01-01
    • 2020-09-22
    相关资源
    最近更新 更多