数据库中的"class"字段



我有一个数据库,它包含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

调试器映像:正如您在调试器类中看到的,_为空

为什么?

尝试使用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数据库列的设置器。

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

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

最新更新