2016-02-08 86 views
-2

我在使用HQL時遇到了一些問題,因爲我是新手。儘管我沒有「簡單查詢」的問題,但我目前仍然堅持在三個表之間進行查詢。HQL加入三張表

我已閱讀教程,但找不到適合自己需要的示例。我會盡我所能解釋我的問題:

我有三個不同的表,我們將它們命名爲HOUSESOWNERSOWNERINFOS

給定一個小鎮身份證,我需要列表中的所有房屋從鎮,包括名稱和房子的主人姓

我做了一個非常簡單的圖形顯示錶之間的連接:

enter image description here

我也不能確定哪個連接策略,我應該使用。任何形式的幫助將受到高度讚賞,因爲解決這個問題對我來說是一個優先事項。

提前致謝!

+0

請張貼相關的映射和你試圖解決這個問題獲取所有業主。 –

+1

與'OwnerInfo'關聯的'Owner'是一對一還是一對多? –

+0

這是一對一的協會 –

回答

1

這僅僅是一個模板

class House { 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "fk_town") 
    private Town town; 

    @OneToMany(mappedBy = "house") 
    private List<Owner> owners; 

} 

class Owner { 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "fk_house") 
    private House house; 

    @OneToOne 
    @JoinColumn(name = "fk_owner_info") 
    private OwnerInfo ownerInfo; 

} 

class OwnerInfo { 

    @OneToOne(mappedBy = "ownerInfo", fetch = FetchType.LAZY) 
    private Owner owner; 

} 

最簡單的情況下,與業主信息

from House h inner join fetch h.owners where h.town.id = :townId 
+0

非常感謝。將測試這個。 –

+0

@AsierAranbarri不客氣。 'join fetch'可以很慢,所以你可以通過額外的連接和預測來改進HQL請求。 –