Всем привет!
Есть две таблицы: документ и рубрика. Есть соответствующие два класса. Мне нужно отобрать документ, принадлежащий рубрике с идентификатором 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 выполнять запрос таким образом?
Всем заранее спасибо! |