2016-02-08 85 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请求。 –