【发布时间】:2012-05-18 19:36:40
【问题描述】:
编辑: 我使用的是 1.6.8 版的 jOOQ;在较新的版本中,这应该可以工作(见答案)
我正在为我的 java Web 应用程序编写一个网格模型,使用 Jooq 来处理通过分页、排序等获取数据...
首先,我使用factory.select(...) 创建一个选择并将其 (SelectConditionStep) 作为参数传递给我的网格模型,在此我根据参数添加所需的.limit() 和.orderBy()。
但我现在的问题是我还需要知道结果的总数(不仅仅是 1 页)来计算总页数。所以我的问题是,是否有可能以某种方式从给定的SelectConditionStep 创建计数查询。
我想把它作为一个子查询包装在一个计数查询中;类似于:
(不起作用,只是为了展示想法)
factory.select(count()).from(selectConditionStep)...
在 MySQL 中我会这样做:
select count(*) from (select ...) as r
我拥有的当前代码:
private final SelectConditionStep selectStep;
...
@Override
public int getAvailableRows() {
JooqSelect select = new JooqSelect() {
@SuppressWarnings("unchecked")
protected Result<Record> select(Connection connection) throws SQLException {
Factory create = new Factory(connection, dialect);
create.attach(selectStep);
/* This does not compile, just to show what I need */
return create.select(count()).from(selectConditionStep).fetch();
}
};
session.doWork(select);
/* Get result */
return select.getResult()...;
}
【问题讨论】:
-
你正在尝试做的应该工作。
SelectFromStep.from(TableLike...)方法接受子选择(即SelectConditionStep,它扩展了TableLike。你能提供完整的例子和你得到的错误吗? -
@LukasEder 我添加了一些代码。我对 Jooq 很陌生,但由于 Hibernate 的一些限制,我正在尝试 Jooq,因此感谢您的帮助。