将 Hibernate @Formula (case) 转换为 JOOQ 字段
Convert Hibernate @Formula (case ) to JOOQ field
我正在将整个数据库访问层从 Hibernate 重写到 JOOQ,我面临以下问题。
其中一个JPA模型被@Formula注解注解如下:
@Formula("(case"
+ " when field1 >= 0.5 then 2"
+ " when field1 >= 0.2 then 1"
+ " else 0 end)")
private int field2;
我看到了以下问题:
但它并没有真正帮助
如何将上述查询转换为 JOOQ DSL?
jOOQ 手册中关于 CASE
表达式的部分将帮助您:
http://www.jooq.org/doc/latest/manual/sql-building/column-expressions/case-expressions
基本上,您应该构建的表达式如下所示:
Field<Integer> field2 =
DSL.when(TABLE.FIELD1.ge(0.5), 2)
.when(TABLE.FIELD1.ge(0.2), 1)
.otherwise(0);
当然,jOOQ 不是基于注释的 API,因此您不能使用注释在目标实体上自动生成该值。就像在 SQL 中一样,您将在所有相关查询中使用上述 field2
表达式,例如
DSL.using(configuration)
.select(TABLE.ID, TABLE.FIELD1, field2)
.from(TABLE)
.fetch();
我正在将整个数据库访问层从 Hibernate 重写到 JOOQ,我面临以下问题。
其中一个JPA模型被@Formula注解注解如下:
@Formula("(case"
+ " when field1 >= 0.5 then 2"
+ " when field1 >= 0.2 then 1"
+ " else 0 end)")
private int field2;
我看到了以下问题:
如何将上述查询转换为 JOOQ DSL?
jOOQ 手册中关于 CASE
表达式的部分将帮助您:
http://www.jooq.org/doc/latest/manual/sql-building/column-expressions/case-expressions
基本上,您应该构建的表达式如下所示:
Field<Integer> field2 =
DSL.when(TABLE.FIELD1.ge(0.5), 2)
.when(TABLE.FIELD1.ge(0.2), 1)
.otherwise(0);
当然,jOOQ 不是基于注释的 API,因此您不能使用注释在目标实体上自动生成该值。就像在 SQL 中一样,您将在所有相关查询中使用上述 field2
表达式,例如
DSL.using(configuration)
.select(TABLE.ID, TABLE.FIELD1, field2)
.from(TABLE)
.fetch();