2012-06-02 82 views
1

我有这三个表。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,但没有找到一个解决方案。

+0

您的帖子没有直接链接到JSF,我删除了该标签并添加了Java代替。 –

+0

HQL与实体一起工作。根据这些实体,而不是描述您的表格,向我们展示实体及其关联,并告诉我们您想从查询返回的内容。 –

回答

0

我明白为什么这个之前否决。请到直通张贴问题之前,Hibernate文档。

正如上面提到的休眠与工作的实体,您需要提及当你在Hibernate连接表的别名。

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

由于您没有提供您的entitie s,我假设UserTrackRecord有一个名为profilePersonalInfo的属性,它的类型是ProfilePersonalInfo。如果没有,那么请通过Hibernate关联。

相关问题