我使用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一样。
如何获取枚举值?
答案 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);