2016-11-21 129 views
0

我具有低於類LEFT OUTER在休眠JOIN繼承

@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; 
} 

這裏B類是延伸類A.試圖如下查詢

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 

我得到一個錯誤,因爲c_id在B中是未知列。雖然表B是沒有其父表具有c_id列。我如何寫一個查詢來實現左外連接?

回答

0

我猜BS是一個集B類的,你正試圖獲取c.createAlias從B類,這是不存在的(「bs.c」,「C」)

+0

是的,C是不是B類的屬性,但是它可以繼承自A類而不發生。這是我的問題 –