【问题标题】:jOOQ and selecting an enum field into enum objectjOOQ 并将枚举字段选择到枚举对象中
【发布时间】:2016-07-03 02:57:04
【问题描述】:

我正在使用 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&lt;Record1&lt;my.project.model.jooq.enums.Color&gt;&gt;,所以我想知道是否有一种方法可以像使用任何 pojo 一样立即将 Color 枚举提取到列表中。

如何获取枚举值?

【问题讨论】:

  • 创建新枚举?我不明白。枚举由 jOOQ 自动生成。我想将分配给表字段的枚举提取到 jOOQ 自动生成的 Java 对象中

标签: java sql postgresql enums jooq


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-01-29
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 2015-08-22
    相关资源
    最近更新 更多