1. Java / Говнокод #7993

    +73

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 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. Абстракция, что и говорить.

    Запостил: lucidfox, 27 Сентября 2011

    Комментарии (6) RSS

    • >>Обход косяков конкретной СУБД
      Был у меня опыт разработки проги поддерживающей MySQL, MSSQL, Oracle, с использование Hibernate. И могу точно сказать, что Hibernate не избавит вас от необходимости опускаться до развилок по engine. В сложных запросах это просто необходимо, и обычно пишутся raw-sql для каждого engine. У нас это касалось подсистемы сборки точек и запросов построения графических отчетов.
      Ответить
    • любая ОРМ - как и положено любому адаптеру-обертке - тормозное говно с кучей ненужных промежуточных действий, по определению.
      Ответить

    Добавить комментарий