Jooq:从 SortField 中提取值
Jooq: Extract value from SortField
我正在用 Jooq 做分页。数据按多个字段排序,其中之一是字段上的自定义函数。例如,我有一个这样的 SortField:
DSL.coalesce(TABLE.COLUMN, 0).asc()
最后的 SQL 看起来像:
SELECT a, b, c
FROM TABLE
WHERE condition
ORDER BY COLUMN_A ASC, coalesce(TABLE.COLUMN, 0) ASC
现在我想获取页面上最后一条记录的值。使用
时它与普通字段一起工作
record.getValue(field.getName())
但是当涉及到我的自定义字段时,它会抛出一个异常
java.lang.IllegalArgumentException: Field (coalesce) is not contained
in Row
我们有什么方法可以得到上述 coalesce 函数的值吗?
这不是 jOOQ 特有的。 SQL 就是这样工作的。您得到的行为是自然的,因为您没有 select 该表达式:
SELECT a, b, c
FROM TABLE
WHERE condition
ORDER BY COLUMN_A ASC, coalesce(TABLE.COLUMN, 0) ASC
将生成 3 列:a
、b
和 c
。示例:
a b c
------------
1 2 3
4 5 6
在该结果中,没有名为 "coalesce" 的列。如果您想要一个名称为 "coalesce" 或类似名称的列,则需要对其进行投影。在 jOOQ 中:
Field<Integer> coalesce = DSL.coalesce(TABLE.COLUMN, 0);
for (Record record : DSL.using(configuration)
.select(TABLE.A, TABLE.B, TABLE.C, coalesce)
.from(TABLE)
.where(condition)
.orderBy(TABLE.A.asc(), coalesce.asc()))
System.out.println(record.get(coalesce));
我正在用 Jooq 做分页。数据按多个字段排序,其中之一是字段上的自定义函数。例如,我有一个这样的 SortField:
DSL.coalesce(TABLE.COLUMN, 0).asc()
最后的 SQL 看起来像:
SELECT a, b, c
FROM TABLE
WHERE condition
ORDER BY COLUMN_A ASC, coalesce(TABLE.COLUMN, 0) ASC
现在我想获取页面上最后一条记录的值。使用
时它与普通字段一起工作record.getValue(field.getName())
但是当涉及到我的自定义字段时,它会抛出一个异常
java.lang.IllegalArgumentException: Field (coalesce) is not contained in Row
我们有什么方法可以得到上述 coalesce 函数的值吗?
这不是 jOOQ 特有的。 SQL 就是这样工作的。您得到的行为是自然的,因为您没有 select 该表达式:
SELECT a, b, c
FROM TABLE
WHERE condition
ORDER BY COLUMN_A ASC, coalesce(TABLE.COLUMN, 0) ASC
将生成 3 列:a
、b
和 c
。示例:
a b c
------------
1 2 3
4 5 6
在该结果中,没有名为 "coalesce" 的列。如果您想要一个名称为 "coalesce" 或类似名称的列,则需要对其进行投影。在 jOOQ 中:
Field<Integer> coalesce = DSL.coalesce(TABLE.COLUMN, 0);
for (Record record : DSL.using(configuration)
.select(TABLE.A, TABLE.B, TABLE.C, coalesce)
.from(TABLE)
.where(condition)
.orderBy(TABLE.A.asc(), coalesce.asc()))
System.out.println(record.get(coalesce));