数据库中的“class”字段

时间:2016-04-02 15:12:12

标签: java jooq

我有一个包含表PLAYERS_APPEARANCE的数据库,其中有一个名为“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

为什么?

1 个答案:

答案 0 :(得分:0)

尝试使用fetchInto(Table)代替fetchInto(Class)

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数据库列的setter。

另一方面,fetchInto(Table)始终是最安全的选择,因为从数据库列到字段的映射是在代码生成时静态决定的(您可以自己检查),因此没有bean / property /在运行时可以使映射不起作用。

这可能是jOOQ中的一个错误(或缺少的功能) - 您应该提交一张票并等待支持团队。