SQL, HQL и Criteria API hibernate

В каких случаях мы выбираем SQL, Hibernate Query Language и Criteria API hibernate?

2 ответа

  • Критерии Запросы подходят для создания динамических запросов. Например, гораздо проще динамически добавлять порядок или не учитывать некоторые части (например, ограничения) в зависимости от значения параметра.

  • Критерии запросов определяются экземплярами объектов Java, которые представляют элементы запроса не в виде строк. Преимущество этого состоит в том, что ошибки могут быть обнаружены во время компиляции. Запросы критериев являются типобезопасными

  • HQL- запросы определяются как строки, аналогично SQL. Используйте HQL для статических и сложных запросов, потому что это намного легче понять / прочитать.

  • Также HQL не зависит от таблицы базы данных. Вместо имени таблицы мы можем использовать имя Entity в HQL. Таким образом, он может использоваться как независимый от базы данных язык запросов.

    @Entity(name="MyEntityName")
    @Table(name="MyEntityTableName")
    class MyEntity {
    
    //A table with name MyEntityTableName is created and the entity name is MyEntityName.
    //Your JPQL/HQL query would be :
    
    select * from MyEntityName
    
  • Оба из них позволяют вам отделить ваше приложение от SQL. Синтаксис SQL может варьироваться в зависимости от поставщика базы данных (Oracle, MySQL .etc). Таким образом, если вы хотите изменить базовую базу данных, не будет никакого воздействия (или минимального воздействия)

  • Там могут быть специфические для оптимизированных функций SQL, которые вы можете использовать, но они не совместимы с ANSI. Инструменты ORM, такие как Hibernate, несут ответственность за работу с ними, предоставляя оптимизированное решение.

  • ЗапросыSQL с JDBC немного быстрее, чем запросы Criteria и HQL. Но это повышение производительности стоит своих преимуществ.

Надеюсь это поможет.

HQL - подходит для большинства запросов и легко читается и пишется.

Критерии - если вы не хотите писать запрос, вы можете использовать Criteria API. например:-

SELECT * FROM employee WHERE emp_id =1

Критерий запроса будет

 Criteria criteria = session.createCriteria(Employee.class)
  .add(Restrictions.eq("id", new Integer(1));

Получить всех сотрудников

  List customers = criteria.list();

Помимо этого API предоставляет нумерацию страниц, максимальный идентификатор строки, выбор дочернего объекта и т. Д.

SQL - два других API не подходят для вашей работы, тогда используйте стандартный SQL.

Другие вопросы по тегам