jOOQ并在枚举对象中选择枚举字段

时间:2016-03-16 23:41:23

标签: java sql postgresql enums jooq

我使用jOOQ和Postgresql从表格中选择一个枚举值。

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()将返回Result<Record1<my.project.model.jooq.enums.Color>>,所以我想知道是否有办法立即将Color枚举提取到列表中,就像我可以处理任何pojo一样。

如何获取枚举值?

1 个答案:

答案 0 :(得分:2)

从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);