Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: join condition / 7 сообщений из 7, страница 1 из 1
12.09.2007, 19:05:35
    #34795790
mijer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: join condition
После долгих мучений и попыток добавить доп. ограничение на join, так ни к чему и не пришел.
Объясню подробнее. Необходимо при помощи hibernate сформировать запрос вида:
Код: plaintext
select t1.*, t2.* from table1 t1 left join table2 on table1.id = table2.table1_id and table2.some_field = ? where t1.id = ?

Через Criteria, выполнить такой запрос, насколько я знаю, нельзя.
Пробовал через HQL:
Код: plaintext
select t1 from mypackage.MyClass t1 left join fetch t1.collectionОfT2 with t2.someField = ? where t1.id = ?

Но hibernate не дает выполнить такой запрос т.к. используются вместе with и fetch .

Пробовал также выполнить такой запрос и через Native SQL:
Код: plaintext
select {t1.*}, {t2.*} from table1 t1 left join table2 on table1.id = table2.table1_id and table2.some_field = ? where t1.id = ?
При выполнении
Код: plaintext
session.createSQLQuery(sql).addEntity("t1", MyClass. class ).addJoin("t2", "t1.collectionОfT2").setParameter( 0 , value).setParameter( 1 , id).uniqueResult();
выбрасывает исключение, т.к.
Код: plaintext
session.createSQLQuery(sql).addEntity("t1", MyClass. class ).addJoin("t2", "t1.collectionОfT2").setParameter( 0 , value).setParameter( 1 , id).list();
возвращает список из нескольких различных массивов объектов.
Хотя я ожидал, получить один объек класса MyClass, с проинициализированной коллекцией MyClass.collectionОfT2

Может кто-нить сталкивался с похожей проблемой?
...
Рейтинг: 0 / 0
13.09.2007, 14:03:06
    #34797651
Hibernate: join condition
Код: plaintext
1.
select t1 from mypackage.MyClass t1 left join fetch t1.collectionОfT2 t2 where t2.someField = ? AND t1.id = ?
...
Рейтинг: 0 / 0
13.09.2007, 14:40:52
    #34797843
mijer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: join condition
Так не прокатит, т.к. в этом случае будет фильтроваться весь ResultSet. Мне же нужно, чтобы были выбраны все объекты mypackage.MyClass, даже те у которых MyClass.collectionОfT2 может быть пустой.
...
Рейтинг: 0 / 0
13.09.2007, 15:41:45
    #34798143
deepsky
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: join condition
Можешь показать маппинг для своего класса?
...
Рейтинг: 0 / 0
14.09.2007, 10:47:50
    #34799967
mijer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: join condition
Parent:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping auto-import="false">
    <class name="mypackage.entity.Parent" table="PARENT">
        <id name="id" column="ID" type="long" unsaved-value="null">
            <generator class="native"/>
        </id>
        <property name="name" column="NAME" type="string" length="127" not-null="true"/>
        <set name="children" table="CHILD" inverse="true" cascade="save-update">
            <key column="PARENT_ID"/>
            <one-to-many class="mypackage.entity.Child"/>
        </set>
    </class>
</hibernate-mapping>
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
 package  mypackage.entity;

 import  java.io.Serializable;
 import  java.util.LinkedHashSet;
 import  java.util.Set;

 public   class  Parent  implements  Serializable {

     private   Long  id;
     private  String name;
     private  Set children =  new  LinkedHashSet();

     public   Long  getId() {
         return  id;
    }
     public   void  setId( Long  id) {
         this .id = id;
    }
     public  String getName() {
         return  name;
    }
     public   void  setName(String name) {
         this .name = name;
    }
     public  Set getChildren() {
         return  children;
    }
     public   void  setChildren(Set children) {
         this .children = children;
    }
     public   void  addChild(Child child) {
         this .children.add(child);
        child.setParent( this );
    }
}

Child:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping auto-import="false">
    <class name="mypackage.entity.Child" table="CHILD">
        <id name="id" column="ID" type="long" unsaved-value="null">
            <generator class="native"/>
        </id>
        <property name="name" column="NAME" type="string" length="127" not-null="true"/>
        <many-to-one name="parent" column="PARENT_ID" class="mypackage.entity.Parent" not-null="true"/>
    </class>
</hibernate-mapping>
...
Рейтинг: 0 / 0
14.09.2007, 10:49:18
    #34799972
mijer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: join condition
Забыл:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
 package  mypackage.entity;

 public   class  Child {

     private   Long  id;
     private  String name;
     private  Parent parent;

     public   Long  getId() {
         return  id;
    }
     public   void  setId( Long  id) {
         this .id = id;
    }
     public  String getName() {
         return  name;
    }
     public   void  setName(String name) {
         this .name = name;
    }
     public  Parent getParent() {
         return  parent;
    }
     public   void  setParent(Parent parent) {
         this .parent = parent;
    }
}
...
Рейтинг: 0 / 0
14.09.2007, 19:34:06
    #34802102
mijer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: join condition
Если кому интересно, решил проблему с использованием фильтров
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: join condition / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]