- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
final QOrder qSub = new QOrder("qSub");
final Predicate[] filters = getFilters(qSub, null, null);
if (filters.length > 0) {
// conditions.add(Arrays.asList(filters)); // Do not do this.
// The subquery is here so that MySQL doesn't use the wrong index for
// ORDER BY... LIMIT if we directly add the filter by custid/custdept
// to the list of filters, which will make the search very slow.
// Well, perhaps an ugly workaround, and we might want to adjust
// the custid/custdept index in the future... somehow.
conditions.add(q.id.in(QueryDsl.subFrom(qSub).where(filters).list(qSub.id)));
}
Обход косяков конкретной СУБД на уровне ORM. Абстракция, что и говорить.
karamba 27.09.2011 13:07 # +1
Был у меня опыт разработки проги поддерживающей MySQL, MSSQL, Oracle, с использование Hibernate. И могу точно сказать, что Hibernate не избавит вас от необходимости опускаться до развилок по engine. В сложных запросах это просто необходимо, и обычно пишутся raw-sql для каждого engine. У нас это касалось подсистемы сборки точек и запросов построения графических отчетов.
bugmenot 27.09.2011 13:11 # +4
Кастанеда одобряет
karamba 27.09.2011 13:23 # 0
3.14159265 27.09.2011 14:36 # +3
Teddy_Brown 27.09.2011 16:19 # +3
SmackMyBitchUp 27.09.2011 18:29 # +5