2014-03-24 103 views
0

我使用Hibrnate核心4.3.0。休眠4.3.0.Final:選擇多個表

我有2張表;由表B n的與自身

我有這樣的結構:表A被相關的併購

表A

  • ID:主鍵
  • NAME:元素的名稱
  • STATE

    • * ID_SOURCE *:FK表A
    • * ID_TARGET *:FK到表中的元件

    表B的狀態A

  • * RELATION_NAME *:關係類型的名稱

在表B中,主鍵是由ID_SOURCE和ID_TARGET組成的組合鍵。

現在我已經能夠創建所有正確映射的類;現在I'ld喜歡讓下面的查詢:

select 
    ID, 
    NAME, 
    STATE 
from 
    TABLE_A this1, TABLE_B src1_ 
where 
    src1_.ID_SOURCE=4018 
    and src1_.ID_TARGET=this1.ID 

現在我知道我可以使用HQL和/或本地SQL,以創建此類查詢的,但I'ld喜歡使用Hibernate的標準或更好DetachedCriteria

是否有可能通過使用DetachedCriteria創建此類查詢?

謝謝

安傑洛

+0

你有沒有試過?什麼失敗或者你不明白什麼?因爲現在答案是「是」。 – mabi

+0

@mabi是的,我嘗試了幾種組合,但不成功,我越來越確定,通過使用DetachedCriteria它不可能創建這樣的查詢....你有任何代碼片段,我可以採取靈感 –

回答

0

我猜我發現通過調用setFetchMode來做到這一點;基本上我寫這個的DetachedCriteria(注:我映射與fetch=FetchType.LAZY的關係字段):

select 
    b.ID_SOURCE, 
    b.ID_TARGET, 
    b.RELATION_NAME, 
    a.ID, 
    a.NAME, 
    a.STATE 
from 
    B b 
inner join 
    A a on b.ID_TARGET=a.ID_ENTITY 
where 
    b.ID_SOURCE=? 

現在我想知道什麼是表演:

DetachedCriteria dc = DetachedCriteria.forClass(B.class); 
dc.setFetchMode("tgtA", FetchMode.JOIN); 
dc.add(Property.forName("srcA.id").eq(4018l)); 

這在下面的查詢休眠了改造當我執行這種查詢....這是正確的方式來做到這一點?

謝謝

安傑洛