Статьи

Популярные ORM не делают SQL

Я размышляю о том, что произошло в стандарте ISO / IEC SQL за последние 15 лет. У нас было довольно много новых функций, добавленных к нашему любимому языку SQL. Проверь это:

  • Со стандартом ISO / IEC  SQL: 1999  мы могли бы использовать преимущества группирования наборов и (рекурсивных) общих табличных выражений.
  • Благодаря стандарту ISO / IEC  SQL: 2003  у нас были очень сложные оконные функции и   оператор MERGE .
  • С помощью стандарта ISO / IEC  SQL: 2008  мы могли бы выполнять  многораздельные соединения .
  • Благодаря стандарту ISO / IEC  SQL: 2011  мы теперь можем взаимодействовать с временными базами данных (реализованными до сих пор в IBM DB2 и Oracle).

И очевидно, что в почти нечитаемых документах длиной в 1423 страницы скрывается гораздо больше добра.

Но JPA …

Теперь, какие-либо из этих удивительных функций появляются в JPA? Нет. Будет ли следующий стандарт SQL вводить новые удивительные функции? Я уверен, что так и будет! Я мог бы представить, что предложения Oracle / CUBRID  CONNECT BY или предложения Oracle / SQL Server  PIVOT / UNPIVOT  являются хорошими кандидатами для стандартизации. Я бы просто сошел с ума, если бы сумасшедшее предложение Oracle  MODEL  сделало бы это тоже

В то время как на этих концах происходят захватывающие вещи,  несоответствие импеданса ORM  еще больше углубит и подтвердит  недавние выводы Чарльза Хамбла из QCon , где он наблюдал растущее число людей, которые недовольны постоянно растущей сложностью популярных ORM. Пример сложности:  NamedEntityGraph !

@NamedEntityGraph(
  name="ExecutiveProjects",
  attributeNodes={
    @NamedAttributeNode("address"),
    @NamedAttributeNode(
      value="projects",
      subgraph="projects"
    )
  },
  subgraphs={
    @NamedSubgraph(
      name="projects",
      attributeNodes={
        @NamedAttributeNode("properties")
      }
    ),
    @NamedSubgraph(
      name="projects",
      type=LargeProject.class,
      attributeNodes={
        @NamedAttributeNode("executive")
      }
    )
  }
)

Чувак, это действительно нужно добавить в JPA? Переполнение стека не может отображать столько аннотаций на одном экране! Что ж, если это ответ JEE на недавние изменения SQL, то я рад, что я не слишком много делаю в эти дни. Я делаю SQL, который является отличным языком, если позволить работать свободно.