powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: join condition
7 сообщений из 7, страница 1 из 1
Hibernate: join condition
    #34795790
mijer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После долгих мучений и попыток добавить доп. ограничение на 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
Hibernate: join condition
    #34797651
Код: plaintext
1.
select t1 from mypackage.MyClass t1 left join fetch t1.collectionОfT2 t2 where t2.someField = ? AND t1.id = ?
...
Рейтинг: 0 / 0
Hibernate: join condition
    #34797843
mijer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так не прокатит, т.к. в этом случае будет фильтроваться весь ResultSet. Мне же нужно, чтобы были выбраны все объекты mypackage.MyClass, даже те у которых MyClass.collectionОfT2 может быть пустой.
...
Рейтинг: 0 / 0
Hibernate: join condition
    #34798143
deepsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можешь показать маппинг для своего класса?
...
Рейтинг: 0 / 0
Hibernate: join condition
    #34799967
mijer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Hibernate: join condition
    #34799972
mijer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл:
Код: 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
Hibernate: join condition
    #34802102
mijer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кому интересно, решил проблему с использованием фильтров
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: join condition
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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