Hibernate. Создание named query или именованых запросов.

max аватар
119
Находится в разделах:

Именованый запрос может послужить отличным примером использования специфического запроса, когда обычного объектно-реляционного маппинга недостаточно. 

Есть варианты использования hibernate query language прямиком из кода, а можно просто в конфигурационном файле hibernate указать именованый запрос с использованием параметров. 

Рассмотрим пример несложного именованого запроса, который будет брать селект из таблицы по определенным параметрам, которые будут передаваться из java кода. 

 

Рассмотрим построчно:

1. Объявление именованого запроса:

Теперь из java кода можно будет получать ссылку на именованый запрос по имени "getObjectsByType".

 

2.  Возвращаемый тип данных:

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

 

3.  Тело запроса удобно помещать в блок CDATA, если xml не проходит валидацию, либо будет использована сериализация xml и, чтобы данные не потерялись, они передаются в таком виде, в каком мы их объявили внутри блока. 

 

4. Сам запрос не должен вызвать проблем с объяснениями, единственное на что стоит обратить внимание, так это на два параметра : 

:objId  и :types

 

Это параметры, которые будут подставляться при вызове именованого запроса. 

 

Теперь рассмотрим пример вызова этого запроса:

 

Для выполнения вышеуказанных действий, необходимо иметь необходимые библиотеки hibernate + отлавливать исключения ( если вы не используете IDE ). 

 

Именованые запросы могут выполнять всевозможные запросы. Все, что можно написать чистым sql, можно сделать и там. 

Могут служить альтернативой stored procedure - хранимым процедурам, hibernate query language и составлению запросов на лету через java код. 

 

Удобность использования лежит в использовании декларативного объявления в xml и разделении кода. 

В новых версиях hibernate, named queries могут быть объявлены через аннотации, без использования xml.


Конец
Виктор Суворов, автор многочисленных книг по истории Второй Мировой войны, майор ГРУ, разведчик более, чем уверен в том, что побеждает в этой жизни только тот, кто победил сам себя. Кто победил свой страх, свою лень, свою неуверенность.

BLBYT

max аватар

ЩИТО?

Отправить комментарий

CAPTCHA
Чтобы оставить комментарий, введите пожалуйста код, изображенный на картинке
Image CAPTCHA
Введите символы, изображенные на картинке