如何从TopLink查询中获取前n行?

时间:2011-09-28 09:23:18

标签: java toplink

出于优化目的,我想在子查询中获取前N个结果(我得到前N个ID值),并在主查询中获取子查询中ID值的完整行并对它们进行排序。我现在拥有的是

// This just adds params to the subquery
Expression managedEmp = generateExpression(p_upravljackaFilter);
ReportQuery subQuery = new ReportQuery(CustomDocument.class,
    managedEmp);

subQuery.addAttribute("m_id");

Expression exp = new ExpressionBuilder().get("m_id").in(subQuery);
ReadAllQuery testQuery = new ReadAllQuery(CustomDocument.class,
    exp);
testQuery.addAscendingOrdering("m_creationDate");

List documentList = (List)getTopLinkTemplate().executeQuery(testQuery, true);

到目前为止,我正在尝试使用用户定义的函数,如下所示:

ExpressionOperator fetchFirst = new ExpressionOperator();
fetchFirst.setSelector(1);
Vector s = new Vector();
s.addElement("FETCH FIRST 5 ROWS ONLY");
fetchFirst.printsAs(s);
fetchFirst.bePostfix();
fetchFirst.setNodeClass(FunctionExpression.class);
ExpressionOperator.initializeOperators();
ExpressionOperator.addOperator(fetchFirst);
expression = expression.and(builder.get("m_datumKreiranja").getFunction(fetchFirst);

这就是我停下来的地方,所以这不起作用,但它可以告诉你我走哪条路。这样的事情甚至可能吗?我正在使用Java 1.4和toplink 10g。

1 个答案:

答案 0 :(得分:0)

非常简单,只需插入第二行:

managedEmp = managedEmp.postfixSQL("FETCH FIRST 5 ROWS ONLY");

我的错误在于我尝试过这样的事实:

managedEmp.postfixSQL(“FETCH FIRST 5 ROWS ONLY”);

因为我没有读过postfixSQL的内容。