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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> hibernate создает join с lazy таблицй-справочником, Почему? 
:(
    Опции темы
Barvetal
Дата 22.10.2006, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 181
Регистрация: 31.10.2005

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



Всем привет!

Есть две таблицы: документ и рубрика. Есть соответствующие два класса.
Мне нужно отобрать документ, принадлежащий рубрике с идентификатором 2.
В приложении мне не нужны никакие поля из таблицы рубрики.
Но sql, который генерит hibernate 3.2, производит join в таблицей рубрики и тянет всю таблицу рубрики на клиента. 

Как можно заставить hibernate не делать этого?

Пример:
Document.hbm.xml:
Код
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="net.myorg.persistence.pojo">
    <class name="Document" table="DocumentUnited" mutable="false" lazy="true">
        <cache usage="read-only" />
        <id name="unid" type="string" length="32" column="dcm_unid">
            <generator class="assigned" />
        </id>
        <property name="body" column="dcm_body"/>
        <many-to-one name="rubric" column="rbc_id" class="Rubric" lazy="proxy"/>
    </class>
</hibernate-mapping>


Rubric.hbm.xml
Код
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="net.myorg.persistence.pojo">
    <class name="Rubric" mutable="false" lazy="true" >
        <id name="id" column="rbc_id"/>
        <property name="name" column="rbc_name"/>
    </class>
</hibernate-mapping>


Код, производящий загрузку документа:
Код
Criteria query = session.createCriteria(Document.class);
query.createCriteria("rubric").add(Restrictions.eq("id", 2));
List res = query.list()


Так вот, этот код генерирует следующий запрос:
Код

select -- здесь идет перечень всех полей таблиц документов и рубрик
from DocumentUnited this_ inner join inner join Rubric rubric2_ on this_.rbc_id=rubric2_.rbc_id 
where rubric2_.rbc_id = ?


Но мне не нужны поля таблицы rubric!!! Мне нужны только поля таблицы Document. Зачем hibernate джойнит мне эту таблицу?? Я же ему указал:
Код
<many-to-one name="rubric" column="rbc_id" class="Rubric" lazy="proxy"/>



Я хочу добиться такого запроса:
Код
select // здесь идет перечень всех полей таблиц документов и рубрик
from DocumentUnited this_ 
where this_.rbc_id = ?


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

Как мне заставить hibernate выполнять запрос таким образом?

Всем заранее спасибо!
PM MAIL   Вверх
tux
Дата 22.10.2006, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

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



Попробуй выполнить тоже самое запросом на HQL:
Код

Query q = s.createQuery("from Document d where d.rubric.id = :id").setString("id", id);

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

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

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


 




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


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

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