JPA и Hibernate - критерии против JPQL или HQL

Существует разница в производительности oraclejdk между HQL и критериями Query: каждый jdk раз, когда вы запускаете hql запрос с помощью критерияqueryQuery, он hql создает новый псевдоним для java имени таблицы, который не .java отражается в последнем запрошенном java-api кэше для какой-либо базы openjdk данных. Это приводит к накладным j2se расходам на компиляцию сгенерированного java-se SQL и требует больше времени core-java для выполнения.

Относительно hibernate стратегий получения [http://www.hibernate.org/315.html]

  • Criteria учитывает настройки ленивости в ваших сопоставлениях и гарантирует, что то, что вы хотите загрузить, будет загружено. Это означает, что один запрос Criteria может привести к нескольким операторам SQL Direct SELECT для выборки подграфа со всеми неленивыми сопоставленными ассоциациями и коллекциями. Если вы хотите изменить «как» и даже «что», используйте setFetchMode(), чтобы включить или отключить выборку внешнего соединения для конкретной коллекции или ассоциации. Критериальные запросы также полностью соответствуют стратегии выборки (присоединение против выбора против подзапроса).
  • HQL учитывает настройки лени в ваших сопоставлениях и гарантирует, что то, что вы хотите загрузить, будет загружено. Это означает, что один запрос HQL может привести к нескольким SQL-операторам немедленного выбора SELECT для выборки подграфа со всеми неленивыми сопоставленными ассоциациями и коллекциями. Если вы хотите изменить «как» и даже «что», используйте LEFT JOIN FETCH, чтобы разрешить извлечение внешнего соединения для конкретной коллекции или обнуляемую ассоциацию «многие-к-одному» или «один-к-одному», или JOIN FETCH, чтобы включить выборка внутреннего соединения для не допускающей обнуления ассоциации "многие к одному" или "один к одному". Запросы HQL не принимают во внимание какие-либо fetch = "join", определенные в документе сопоставления.

java

hibernate

hql

criteria

hibernate-criteria

2022-10-23T08:42:43+00:00