2016-04-02 57 views
0

我有一個包含表PLAYERS_APPEARANCE的數據庫,其中有一個名爲「Class」的字段。數據庫中的「class」字段

我與jooq查詢像這樣

PlayersAppearance pp = getCtx().select(PLAYERS_APPEARANCE.RACE,PLAYERS_APPEARANCE.CLASS,PLAYERS_APPEARANCE.GENDER). 
    from(PLAYERS_APPEARANCE).where(PLAYERS_APPEARANCE.ID.equal(id)).fetchInto(PlayersAppearance.class).get(0); 

PlayersAppearance.class是jooq產生的POJO。對於Class字段,它在java中生成class_字段,我用getClass_()方法訪問它。 class_命名,以避免與本地方法的getClass()的衝突,但它也打破了數據庫字段值不知何故

問題

PlayersApperance PA = pa.getClass_()返回NPE

Debugger image: As you can see in the debugger class_ is null

爲什麼?

+0

調試器屏幕中的每個字段都爲空,即使是id也是如此。你沒有從數據庫中讀取這條記錄 – Raffaele

+0

我只看到3個字段,如查詢中所示:種族,性別和職業。並且類字段只有一個空的 –

+0

激活[jOOQ日誌記錄](http://www.jooq.org/doc/3.1/manual/sql-execution/logging/)並查看會發生什麼情況 – Raffaele

回答

0

嘗試使用的fetchInto(Class)fetchInto(Table)代替:

PlayersAppearance pa = ctx 
    .select(PLAYERS_APPEARANCE.RACE 
     , PLAYERS_APPEARANCE.CLASS 
     , PLAYERS_APPEARANCE.GENDER) 
    .from(PLAYERS_APPEARANCE) 
    .where(PLAYERS_APPEARANCE.ID.eq(id)) 
    .fetchInto(PLAYERS_APPEARANCE) 

也許在Java生成附加有下劃線的字段名稱,但fetchInto(Class) API依靠反射來完成其工作,而現在看來,這不是指示使用setClass_()作爲CLASS數據庫列的設置器。

另一方面,fetchInto(Table)始終是最安全的選擇,因爲從數據庫列到字段的映射是在代碼生成時靜態確定的(您可以自己檢查它),所以沒有bean/property /在運行時會發生什麼使映射不起作用。

這可能是jOOQ中的一個錯誤(或缺失的功能) - 您應該提交一張票並等待支持團隊。

+0

感謝您的答案! –

+0

確實,這是一個錯誤:https://github.com/jOOQ/jOOQ/issues/4867 –