jooq从表

时间:2018-02-24 19:41:09

标签: java jooq

在表的特定分区上执行选择查询的正确方法是什么。例如,我有一个在特定列上进行范围分区的员工表。

目前我这样做:

Result<Record> fetch = DSL.using(configuration())
  .select()
  .from(EMPLOYEES)
  .fetch();

执行以下sql的正确方法是什么(其中p2是分区)

SELECT * FROM employees PARTITION (p2);

更新1 当我使用可更新记录时,更新/插入怎么样,例如:

employeeRecord.attach(configuration())
employeeRecord.update(); // or insert

我假设我可以做类似这样的事情,但那会处理乐观的锁定案例(我通过我桌子上的版本列使用)

DSL.using(configuration())
                    .update("{0} partition (p2)", EMPLOYEES)
                    .set(EMPLOYEES.NAME, "abc")
                    .where(EMPLOYEES.ID.eq(123))
                    .execute();

2 个答案:

答案 0 :(得分:2)

jOOQ目前不支持表格上的PARTITION条款。相关功能请求为:https://github.com/jOOQ/jOOQ/issues/2774

您可以使用纯SQL模板API轻松解决此限制: https://www.jooq.org/doc/latest/manual/sql-building/plain-sql-templating

Result<Record> fetch = DSL.using(configuration())
  .select()
  .from("{0} partition (p2)", EMPLOYEES)
  .fetch();

以上是方便:

Result<Record> fetch = DSL.using(configuration())
  .select()
  .from(DSL.table("{0} partition (p2)", EMPLOYEES))
  .fetch();

答案 1 :(得分:0)

您是否尝试过这里的示例,例如

create.select(t.BOOKED_AT, t.AMOUNT,
         sum(t.AMOUNT).over().partitionByOne()
                      .orderBy(t.BOOKED_AT)

https://www.jooq.org/doc/3.0/manual/sql-building/column-expressions/window-functions/