我有这三个桌子。

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。

一个配置文件有许多用户跟踪记录。
一个配置文件有一个profilepersonalinfo(还有另外两个表,就像profilepersonalinfo一样,它们的profileid为fk的basicinfo和backgroundinfo)。

我有自己的个人资料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无效,它给了我外部连接或完全连接,必须紧随其后的是路径表达式查询异常。

我之前曾发布过相同的问题,但有人投票赞成:(所以我做了更多的研发工作,但没有找到解决方案。

最佳答案

我了解为什么以前对此表示否决。在发布问题之前,请仔细阅读休眠文档。

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

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


由于您尚未提供实体,因此我假设UserTrackRecord具有名为profilePersonalInfo的属性,该属性的类型为ProfilePersonalInfo。如果没有,请通过休眠关联。

关于java - hql从多对一关系表中选择表记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10863777/

10-09 03:33