2016-11-21 3 views
0

У меня ниже классовLEFT OUTER JOIN в Hibernate Наследование

@Inheritance(strategy=InheritanceType.JOINED) 
Class A{ 
private long a_id; 
private C C; 

} 

Class B extends A{ 
private D d; 
} 

Class C{ 
private long c_id; 
} 

Class D{ 
private long d_id; 
private Set<B> bs; 
} 

Здесь класса В расширяет класс А. Попытка запроса, как показано ниже

Criterion criterion = Restrictions.and(Restrictions.eq(
        "b.c", c_instance)); 

Criteria c = session.createCriteria(D.class, "d") 
c.createAlias("bs", "b",JoinType.LEFT_OUTER_JOIN,criterion); 
c.createAlias("bs.c","c") 

Выход запроса:

select d.d_id from D d left outer join B bs on d.d_id=bs.d_id and bs.c_id=2489 inner join A on bs.a_id=A.a_id inner join C A.c_id=C.c_id 

Im получает сообщение об ошибке, поскольку c_id - unknonwn column в B. Хотя таблица B doe sn't имеет столбец c_id, который имеет его родительская таблица. Как я могу написать запрос для достижения левого внешнего соединения здесь?

ответ

0

Я думаю, закладная представляет собой набор классов B и вы пытаетесь принести c.createAlias ​​(«bs.c», «C») из класса B, который не существует

+0

Да, с не является свойство класса B, но он может наследовать от класса A, которого не бывает. Это мой вопрос –