Как я могу получить первые n строк из запроса TopLink?

В целях оптимизации я хочу получить первые N результатов в подзапросе (я получаю первые N значений идентификатора), а в основном запросе получить полные строки для значений идентификатора в подзапросе и упорядочить их. То, что у меня есть сейчас

// 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.


person Andrija    schedule 28.09.2011    source источник


Ответы (1)


Очень просто, просто вставьте во вторую строку:

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

Моя ошибка была в том, что я пробовал так:

manageEmp.postfixSQL("ТОЛЬКО ПЕРВЫЕ 5 СТРОК");

потому что я не читал, что делает postfixSQL.

person Andrija    schedule 28.09.2011
comment
Эх, это работает, только если у вас есть простой запрос. Кажется, что toplink помещает все свои соединения после того, как генерирует все остальное ( сгенерированный-запрос" title="как я могу изменить позицию соединения в сгенерированном запросе верхней ссылки"> stackoverflow.com/questions/7594222/ ), поэтому postfixSQL не работает должным образом. - person Andrija; 10.10.2011