0

Class、Person、PersonTalent という名前の 3 つのテーブルがあります。

1.Person には Person ID と Name がありました。

2.クラスには人物のリストがあり、各人物には上記の id があります。

3.PersonTalent には、Person Id と Person Talent Name があります。

ここで、Person Talent Name に基づいて Class からレコードのリストを取得したいと考えています。どうすればHQL INNER JOINでそれを達成できますか。

私はこのように試しました:

SELECT DISTINCT C FROM Class C, PersonTalent PT
        INNER JOIN C.persons P
        WHERE P.personId = PT.personId AND (PT.personId=1 AND PT.personTalentName='HQL')

上記のコードでは、personId に一致するすべてのクラス オブジェクトを取得していますが、個人 ID と個人タレント名の両方に一致するクラス オブジェクトのリストが必要です。

これを達成するのを手伝ってください。

よろしく、 ラジャセカール

4

2 に答える 2

0

私見、コレクションをDBにマッピングせずにクラスエンティティを定義します。

その後、最初に次のように書きます。

SELECT C FROM Class C
WHERE EXISTS(
    SELECT 'X' FROM Person P, Persontalent PT
    WHERE P.fkClass = C.id
    AND P.personId = PT.personId
    AND PT.personId = 1 
    AND PT.personTalentName = 'HQL'
)

この最初のクエリの後:

2 番目のクエリを作成します。

SELECT P
FROM Person P, PersonTalent PT
WHERE P.fkClass in (RESULT OF FIRST QUERY)
AND P.personId = PT.personId
AND PT.personId = 1 
AND PT.personTalentName = 'HQL'

この後、最初のクエリの結果 (Class のリスト) を 2 番目のクエリの結果 (特定のクラス インスタンスにリンクする Person のリスト) にリンクするメソッドを記述します。

PS私はあなたのPersonエンティティにクラスエンティティとリンクするプロパティがあると思います(私はfkClassと名付けましたが、正確な名前を知っています)

于 2013-10-08T10:26:24.880 に答える