"class" 数据库中的字段

"class" field in database

我有一个包含 table 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_()[=30= 访问它] 方法。 class_ 的命名是为了避免与本地方法getClass()冲突,但它也以某种方式破坏了数据库字段值

问题

PlayersApperance pa = pa.getClass_() returns NPE

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

为什么?

尝试使用 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/whatever在运行时发生,这会使映射无法正常工作。

这可能是 jOOQ 中的错误(或缺失的功能)- 您应该提交工单并等待支持团队。