0

最適化の目的で、サブクエリで最初の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);

これは文字通り私が立ち止まった場所なので、これは機能しませんが、私がどちらの方向に向かっているのかを示すことができます。このようなことも可能ですか?私はJava1.4とtoplink10gを使用しています。

4

1 に答える 1

0

本当に簡単です。2行目に挿入するだけです。

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

私の間違いは、私がこのように試したという事実にありました:

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

postfixSQLの機能を読んでいないためです。

于 2011-09-28T11:52:25.077 に答える