1

私はこれらの3つのテーブルを持っています。

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 であることを目的としています。

1 つのプロファイルには多くのユーザー実績があります。1 つのプロファイルには 1 つの profilepersonalinfo があります (profilepersonalinfo と同様に、basicinfo と backgroundinfo で、profileid を fk として持つ 2 つのテーブルがあります)。

私は自分のプロファイル id(objecct_profile_id) を 1 としています。ここで、要求送信者の名、姓、および他の 2 つのテーブルからの情報も取得したいと考えています。

私が作った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は機能せず、外部結合または完全結合の後にパス式クエリ例外が続く必要があります。

以前に同じ質問を投稿しましたが、誰かが熱心に投票しました:(そのため、さらに研究開発を行いましたが、解決策が見つかりませんでした.

4

1 に答える 1

0

これが以前に投票されなかった理由を理解しています。質問を投稿する前に、休止状態のドキュメントを確認してください。

上記のように、休止状態はエンティティで動作します。休止状態でテーブルを結合するときは、エイリアスについて言及する必要があります。

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

エンティティを提供していないため、UserTrackRecord には ProfilePersonalInfo タイプの profilePersonalInfo という属性があると想定しています。そうでない場合は、Hibernate アソシエーションを参照してください。

于 2012-06-07T13:52:31.500 に答える