Hibernate — Hibernate Query (HQL) примеры: SELECT, INSERT, UPDATE, DELETE

Hibernate Query Language (HQL) примеры запросов SELECT, INSERT, UPDATE, DELETE

Hibernate может использовать свой мощный язык запросов Hibernate Query Language (HQL), который очень похож на родной SQL. В сравнении с SQL, HQL полностью объектно-ориентирован и использует понятия наследования, полиформизма и связывания.

HQL использует имя класса взамен имени таблицы, а также имя свойства вместо имени колонки!

Используемые технологии:

Hibernate 5.0.1.Final

Maven 3.2.5

IntelliJ IDEA 14

MySQL 5.6.25

1. Описание задачи

Изучить примеры основных запросов: SELECT, INSERT, UPDATE, DELETE, которые выполняются с помощью HQL.

2. Структура проекта

Используется база данных и классы из Hibernate – быстрый старт. Пример приложения Hello World. Там же есть исходники. Рекомендую прочитать эту статью, чтобы было понятно что и откуда берется_вставляется.

3. Пример запроса HQL Select

Создаем запрос, который можно прочитать так: из сущности ContactEntity (маппинг на таблицу Contact) взять строки, в которых колонка firstName = имяПараметра. Дальше параметру присваивается имя и выполняется запрос. Для БД из прошлого примера получим:

Так же можно указать параметр сразу:

Общее замечание

За исключением названий Java классов и свойств, запросы не чувствительны к регистру. Т.е. SeLect будет эквивалентен sELEct, но в то же время org.hibernate.eg.FOO не эквивалентен org.hibernate.eg.Foo, и foo.barSet не равен foo.BARSET.

Кстати многие заметят, что в SQL обычно используются команды в верхнем регистре. В случае работы с Java и Hibernate чаще встречается использование стиля Java (нижний регистр). Ребята из org.jboss акцентируют внимание, что они используют подход Java для работы с Hibernate.

4. Пример запроса HQL Update

Запрос читается как: обновить колонку Contact (замапина на сущность ContactEntity) установив имя, фамилию и дату рождения согласно параметрам в тех местах, где имя равно значению параметра nameCode (в нашем случае — Nick). Дальше устанавливаем параметры и выполняем запрос. Результат — кол-во обновленных строк.

Замечание

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

Так же как и в примере выше, параметры можно писать напрямую. Можно записывать и вот так:

Результат будет таким же — в строке с именем Vasya, имя станет StringName, фамилия LastNameString, а дата присвоится 2012-08-03.

Update HQL example

 

5. Пример запроса HQL Insert

HQL поддерживает запросы в виде INSERT INTO .. SELECT ..

другими словами:

insert into Object (id, name) select oo.id, oo.name from OtherObject oo»;

Т.е. стандартный синтаксис для SQL вида INSERT INTO .. VALUES ..

НЕ поддерживается.

Т.к. в проекте нет одинаковых таблиц, то пример не рабочий, но показывает как бы могло отработать, в случае наличия второй таблицы ContactEntity2 и соответствующих свойств:

 

6. Пример запроса HQL Delete

Удалится строка с именем Leonid. Результат — кол-во удаленных строк.

Как и для update можно использовать другие варианты записи:

Результатом будет количество вставленных записей.

 

Ссылки для скачивания

HQL examples

 

Share Button
31
71711 Total Views 14 Views Today

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