Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> hql -> Criteria, hibernate, Criteria, hql, Restrictions 
:(
    Опции темы
polosatij
  Дата 28.1.2009, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 3
Всего: 8





спортивный интерес.. можно ли в hibernate из hql сделать какой-нибудь Criteria объект и закинуть в него пару Restriction-s?  smile 


--------------------
PM   Вверх
vicod
Дата 31.1.2009, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 24.10.2007
Где: odessa.ua

Репутация: 0
Всего: 2



есть hql.
есть criteria api.
оба механизма необходимы для осуществления выборки.
criteria api это альтернатива hql, эту библиотеку удобно применять для построения запросов критерии которых формируются динамически, в итоге ваши запросы будут ясней, чище, их будет проще поддерживать.
для примера, запрос на hql, условия выборки формируются динамически
Код

Map parameters = new HashMap();
 StringBuffer queryBuf = new StringBuffer("from Sale s ");
 boolean firstClause = true;

 if (startDate != null) {
      queryBuf.append(firstClause ? " where " : " and ");
      queryBuf.append("s.date >= :startDate");
      parameters.put("startDate",startDate);
      firstClause = false;
 }
 if (endDate != null) {
      queryBuf.append(firstClause ? " where " : " and ");
      queryBuf.append("s.date <= :endDate");
      parameters.put("endDate",endDate);
      firstClause = false;
 }
 // And so on for all the query criteria...

 String hqlQuery = queryBuf.toString();
 Query query = session.createQuery(hqlQuery);

 //
 // Set query parameter values
 //
 Iterator iter = parameters.keySet().iterator();
 while (iter.hasNext()) {
      String name = (String) iter.next();
      Object value = map.get(name);
      query.setParameter(name,value);
 }
 //
 // Execute the query
 //
 List results = query.list();

если тоже самое переписать с использованием criteria api, то получим
Код

Criteria criteria = session.createCriteria(Sale.class);
if (startDate != null) {
    criteria.add(Expression.ge("date",startDate);
}
if (endDate != null) {
    criteria.add(Expression.le("date",endDate);
}
List results = criteria.list();

как видишь получилось намного элегантней.

насколько я понял вопрос в том возможно ли из hql запроса составить запрос с использованием criteria api. ответ - да.

Это сообщение отредактировал(а) vicod - 31.1.2009, 17:33
PM MAIL   Вверх
polosatij
Дата 31.1.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 3
Всего: 8




в данном случае тебе известен объект Sale.. мне не известен объект и у них нет общего предка..

Цитата(vicod @  31.1.2009,  16:31 Найти цитируемый пост)
насколько я понял вопрос в том возможно ли из hql запроса составить запрос с использованием criteria api. ответ - да.


нет.. надо hql разборать по частям, добавить свой criteria и сделать заного hql  smile 



--------------------
PM   Вверх
vicod
Дата 31.1.2009, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 24.10.2007
Где: odessa.ua

Репутация: 0
Всего: 2



Цитата
в данном случае тебе известен объект Sale.. мне не известен объект и у них нет общего предка..

как можно составлять запрос если ты не знаешь откуда брать?
Цитата
нет.. надо hql разборать по частям, добавить свой criteria и сделать заного hql  smile

что под criteria иммеется ввиду? criteria api?
PM MAIL   Вверх
polosatij
Дата 31.1.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 22.2.2004
Где: Stuttgart<-> ;Karlsruhe, Germany

Репутация: 3
Всего: 8



Цитата(vicod @  31.1.2009,  17:36 Найти цитируемый пост)
ты не знаешь откуда брать?


мм... что брать? smile

Цитата(vicod @  31.1.2009,  17:36 Найти цитируемый пост)
что под criteria иммеется ввиду? criteria api? 


разбираем hql по частям (тока не работаем как со стрингом).. добавляем туда "пару where" и собираем hql назад.. smile заметь "пару where" написано в кавычках.. это значит, можно добавитть и другие критерии запроса smile


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0692 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.