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.