2012-06-02 112 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關聯。

相關問題