Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
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. Абстракция, что и говорить.
>>Обход косяков конкретной СУБД
Был у меня опыт разработки проги поддерживающей MySQL, MSSQL, Oracle, с использование Hibernate. И могу точно сказать, что Hibernate не избавит вас от необходимости опускаться до развилок по engine. В сложных запросах это просто необходимо, и обычно пишутся raw-sql для каждого engine. У нас это касалось подсистемы сборки точек и запросов построения графических отчетов.
Был у меня опыт разработки проги поддерживающей MySQL, MSSQL, Oracle, с использование Hibernate. И могу точно сказать, что Hibernate не избавит вас от необходимости опускаться до развилок по engine. В сложных запросах это просто необходимо, и обычно пишутся raw-sql для каждого engine. У нас это касалось подсистемы сборки точек и запросов построения графических отчетов.
Кастанеда одобряет