2016-03-16 456 views
1

我使用jOOQ與Postgresql從表中選擇一個枚舉值。jOOQ並選擇枚舉字段到枚舉對象

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 [email protected] 

我看到fetch()將返回Result<Record1<my.project.model.jooq.enums.Color>>,所以我不知道是否有一種方法可以立即獲取顏色枚舉到我可以做一個列表任何pojo。

我該如何獲取枚舉值?

+0

創建新的枚舉?我不明白。枚舉是由jOOQ自動生成的。我想將分配給表的一個字段的枚舉存入由jOOQ自動生成的Java對象 –

回答

2

從第3.7版開始,這個功能尚未支持開箱即用,但會在第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); 
+0

這太神奇了。它工作得很好! –