2013-09-21 35 views
2

我正在使用jOOQ v2.6,因爲我正在使用SQL Server 2008 R2,並且在jOOQ v3.1中存在導致代碼生成失敗的錯誤。 (我知道這將在v3.2中修復)。重寫jOOQ的UpdatableRecords異常處理

從手冊:

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

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

如果商店()失敗,一個DataAccessException的異常。就我而言,我只是喜歡這個過程,直到CRUD操作起作用,或者我觀察了這個問題並進行干預。這意味着我需要在try/catch中包裝BookRecord.store()的每個實例。這適用於所有UpdatableRecords中的所有CRUD操作。

是否有一種簡單的方法可以處理所有生成的Record類型的所有CRUD DataAccessExceptions,而不必記得一遍又一遍地實現相同的異常處理程序?

+0

在v3.1中代碼生成真的失敗嗎?如果你[指這](https://groups.google.com/forum/#!topic/jooq-user/eEOgoCJf0xU),那麼我認爲這個問題應該只是美容......? –

+0

我現在給你回答了這個問題。我認爲更詳細的討論可能更適合[jOOQ用戶組](https://groups.google.com/forum/#!forum/jooq-user)。無論如何,有趣的想法! –

+0

@LukasEder從memeory回憶 - 'SQLServerDatabase.is2012()'返回true。 [#2624](https://github.com/jOOQ/jOOQ/issues/2624)修正了它。 –

回答

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 
    } 
} 

注意,目前這不會阻止異常拋出的,本身。