Добавить в избранное   Сделать стартовой   Главная   E-mail   Форум   Мой блог 
   
Cертификации

Errors

ETL

FAQ (по темам)

GIS

Web

wiki

Администрирование

Безопасность

Книги
Oracle, ...

Новости

ОС

Программирование

Проектирование БД

Производительность

Скачать

Советы

Тестирование

Установка

FAQ - по базам данных
FAQ - по базам данных
Установка СУБД
Oracle
Sybase
MySQL
PostgreSQL
MS SQL Server
Interbase, Firebird
Другие DB
Администрирование
Oracle
MySQL
Sybase
PostgreSQL
MS SQL Server
Interbase, Firebird
IBM DB2
Другие DB
Проектирование БД
Статьи
ETL
Теория БД
ErWin
Designer 2000
PowerDesigner
Хранилища данных
CASE средства
OLAP
Бизнес - анализ (BI)
Производительность
Oracle
MSSQL
Interbase, Firebird
IBM DB2
MySQL
PostgreSQL
SYBASE
Безопасность БД
Oracle
MS SQL Server
Инъекция SQL
Программирование
Transact-SQL
PL/SQL
C++
XML
SQL
PostgreSQL
MDX
Java
VBA Excel
Книги по базам
Oracle
Заказ книг
ОС
Установка и настройка
UBUNTU
ОС
Установка и настройка
UBUNTU
FAQ
FAQ - по базам данных
Главная arrow Java arrow Hibernate. Создание named query или именованых запросов.

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

Печать E-mail

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

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

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

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

 

1<sql-query name="getObjectsByType">
2        <return-scalar column="ID" type="long">
3        <!--[CDATA[
4                SELECT objects.id
5                FROM   test_objects objects
6                WHERE  objects.user_id = :objId and objects.type in (:types)
7        ]]-->
8</return-scalar></sql-query>

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

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


1<sql-query name="getObjectsByType">
2</sql-query>

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

 

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


1<return-scalar column="ID" type="long">
2</return-scalar>

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

 

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


1<!--[CDATA[
2...
3]]-->

 

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

:objId  и :types

 

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

 

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


01// получаем сессию
02 Session session = HibernateUtils.getSessionFactory()
03                .getCurrentSession();
04// Получаем наш именованый запрос по имени
05Query named = session.getNamedQuery("getObjectsByType");
06// передаем параметр objId
07named.setParameter("objId ", 123);
08// Теперь нужно передать второй запрос. Поскольку там несколько значений, в которых будет использоваться поиск
09// Надо передать коллекцию с параметрами
10List<String> types = new ArrayList<String>();
11types.add("Type1");
12types.add("Type2");
13// Передаем коллекцию как второй параметр
14named.setParameterList("types", types);
15// Получаем результаты выполнения запроса
16List<Object> result = named.list();
17</object></string></string>

 

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

 

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

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

 

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

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

 
 
« Пред.   След. »
Взаимосвязанные статьи
     

Последние добавленные статьи
Поиск
Ссылки
Главная
Скачать
Курсы
Роль АБД (SYSDBA)
Карта сайта
Автостекла
Контакты
Войти на сайт
Популярные статьи
Online - тесты
1Z0-042
Rambler's Top100 МЕТА - Украина. Рейтинг сайтов хостинг от freehost.com.ua

Все права защищены.SYSDBA 2010 | Если у Вас есть хороший материал пришлите его нам.