hql从多个关系表中选择表记录

时间:2012-06-02 15:54:20

标签: java hibernate hql

我有这三张桌子。

UserTrackRecord -> id, profile_id(fk), object_profile_id(int)
Profile and -> id
ProfilePersonalInfo-> id, profile_id(fk), firstname, lastname

profile_id和object_profile_id的目的是当有人向我发送友谊请求时,object_profile_id是我的个人资料ID,外键是发件人的个人资料ID。

一个配置文件有许多usertrackrecords。 一个配置文件有一个profilepersonalinfo(还有两个表就像profilepersonalinfo,它们是basicinfo和backgroundinfo,其profileid为fk)。

我有自己的个人资料ID(objecct_profile_id)说1.现在,我想获取请求发送者的名字,姓氏以及其他两个表中的信息。

我做的sql查询是

select utr.profile_profile_id, ppi.dob, ppi.first_name, ppi.last_name, "
                + "pbi.religion, pbi.city_birth, pbi.country_birth from "
                + "user_track_record utr "
                + "inner join profile_personnel_info ppi on ppi.profile_profile_id=utr.profile_profile_id "
                + "inner join profile_background_info pbi on pbi.profile_profile_id=utr.profile_profile_id "
                + "where utr.object_profile_id=1

工作正常。

在hql中,当我最多简化了我的查询时,它变成了

Select * from UserTrackRecord utr inner join ProfilePersonalInfo ppi 

但是id没有用,它给了我外连接或完全连接必须跟着路径表达式查询异常。

我之前发过同样的问题,但有人对它进行了否决:(所以我做了更多的R& D但没有找到解决方案。

1 个答案:

答案 0 :(得分:0)

我理解为什么之前被投票否决了。在发布问题之前,请通过hibernate文档。

如上所述,hibernate与实体一起使用,在hibernate中连接表时需要提一个别名。

Select utr from UserTrackRecord utr inner join utr.profilePersonalInfo ppi and so on......

由于您尚未提供实体,我假设UserTrackRecord具有名为profilePersonalInfo的属性,该属性属于ProfilePersonalInfo类型。如果没有,那么请通过Hibernate协会。