2

我正在使用 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,而不必记住一遍又一遍地实现相同的异常处理程序?

4

1 回答 1

3

我不能 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
    }
}

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

于 2013-09-22T06:15:20.623 回答