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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выполнение обычного SQL в hibernate 
:(
    Опции темы
alexadr
Дата 8.12.2007, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 25.9.2006

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



Сразу прошу прощение за то что пложу темы. Подобную тему уже открывал, но просто запутался(http://forum.vingrad.ru/forum/topic-185944/kw-hibernate-sql--query.html)

Короче меня интересует как можно выполнить обычный SQL запрос используя Hibernate, при этом результат запроса смэпить на некий POJO.

Имеем две таблицы(в общем случае хоть 50):

Код

create table person (
id int,
name text  
)

create table clothes (
id int,
id_pers int,
name text  
)


Т.е. одна таблица про "человеков", вторая про одежды. Хочу сделать запрос, - выбрать для каждого человека его одежду. Те.

Код

select prs.name, cl.name from person prs, clothes cl where prs.id=cl.id_pers


Так вот имеено этот запрос я хочу выполнить средствами гибернейта.

Для этого для начала я создам фабрику, сессию и открою транзакцию:

Код

        SessionFactory sf = new Configuration().configure().buildSessionFactory();
        Session sn = sf.getCurrentSession();
        sn.beginTransaction();



Далее я создаю сам запрос:
        
Код

        SQLQuery query = sn.createSQLQuery("select prs.name, cl.name from person prs, clothes cl where prs.id=cl.id_pers");



Теперь собственно как мне на некицй POJO класс смепить результат этого запроса?


PM MAIL   Вверх
LSD
Дата 8.12.2007, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Посмотри тут (раздел 16.1.2. Entity queries).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
alexadr
Дата 8.12.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 25.9.2006

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



честно говоря этот раздел пересмотрел неколько раз

Если я правильно понял, то любой POJO класс на который может быть смэплин результат должен быть описан в xml-файле. При этом данному классу необходимо указать таблицу из базы:
Код

<hibernate-mapping>
    <class name="ResultPOJO" table="???????">
          ...........
    </class>
</hibernate-mapping>

А какую мне таблицу указывать, если результат запроса запись не из одной таблицы?
Плюс я могу усложнить запрос добавив некие функции типа count(), max() итп...
PM MAIL   Вверх
LSD
Дата 9.12.2007, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



1. POJO это прото красивое слово, в Hibernate нет понятия POJO, хотя они его и не однократно упомнинают.
2. Мапить можно только на entity.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
alexadr
Дата 10.12.2007, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 25.9.2006

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



Блин, ну а где эти entity описываются, по hibernate-mapping-3.0.dtd они "хаотично"  встречаются в виде атрибутов/элементов?
PM MAIL   Вверх
LSD
Дата 11.12.2007, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Я был не прав, замапить можно на любой объект, делается это так, есть некий объект:
Код

package ru.vingrad.lsd.test.hibenate;

public class Summary
{
  private String name;
  private double total;

  public Summary()
  {
  }

  public String getName()
  {
    return name;
  }

  public void setName(String name)
  {
    this.name = name;
  }

  public double getTotal()
  {
    return total;
  }

  public void setTotal(double total)
  {
    this.total = total;
  }

  @Override
  public String toString()
  {
    return getClass().getSimpleName() + "[" +
           "name = " + name +
           ", total = " + total +
           "]";
  }
}

далее делаем так:
Код

session.createSQLQuery("SELECT name as \"name\", price * amount as \"total\" FROM products").setResultTransformer(Transformers.aliasToBean(Summary.class));

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


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Platon
Дата 11.12.2007, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1801
Регистрация: 25.4.2006

Репутация: 16
Всего: 40



Простите, что лезу со своими тараканами в эту тему, но я не пойму, почему моя такая же тема игнорируется?!

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

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

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


 




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


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

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