jOOQ 并选择一个枚举字段到枚举对象中

jOOQ and selecting an enum field into enum object

我正在将 jOOQ 与 Postgresql 结合使用来 select 来自 table 的枚举值。

List<my.project.jooq.enums.Color> colors =
dsl.selectDistinct(TABLE.T_COLOR.as("color"))
   .from(TABLE).fetch()
   .into(my.project.jooq.enums.Color.class);

无论如何我得到了例外:

org.jooq.exception.MappingException: No matching constructor found on type class my.project.jooq.enums.Color for record org.jooq.impl.DefaultRecordMapper@7c66447f

我看到 fetch() 将 return Result<Record1<my.project.model.jooq.enums.Color>>,所以我想知道是否有一种方法可以立即将 Color 枚举提取到列表中,就像我对任何 pojo 所做的那样。

如何获取枚举值?

从 jOOQ 3.7 开始,这还不是开箱即用的支持,但将在 jOOQ 3.8 中支持(参见 #5154)。

您可以轻松地将字符串列映射到您自己的 Enum 类型,不过,通过

List<my.project.jooq.enums.Color> colors = 
dsl.selectDistinct(TABLE.T_COLOR)
   .from(TABLE)
   .fetch()
   .map(rec -> my.project.jooq.enums.Color.valueOf(rec.getValue(TABLE.T_COLOR)));

如果你的 my.project.jooq.enums.Color 是由 jOOQ 从 PostgreSQL enum 数据类型生成的,你不需要专门映射任何东西,jOOQ 会自动为你做:

List<my.project.jooq.enums.Color> colors = 
dsl.selectDistinct(TABLE.T_COLOR)
   .from(TABLE)
   .fetch(TABLE.T_COLOR);