2016-05-31 12 views
0

クエリの属性を継承し ClassesJPQL:アクセスは、私はJPA(Eclipseのリンク)でこれを実装しました

は今、私は私のすべて表示するクエリを設定してい(私はまだ写真を投稿することはできません)特定の教師がレッスンを受けている学期。

Query query2 = em 
    .createQuery("FROM Semester s, IN (s.lesson) l, IN(l.lessonTeacher) lT1 WHERE lT1.teacher.lastname = :lastname"); 
query.setParameter("lastname", "Spooner"); 
List<Semester> resultList2 = query.getResultList(); 
for(Semester s : resultList2){ 
    System.out.println(s.getname()); 
} 

私の問題はこれです:lT1.teacher.lastname =:姓 は私が継承された属性にアクセスすることはできません。

The state field path 'lT1.teacher.lastname' cannot be resolved to a valid type. 

any1は役に立ちますか?

+0

あなたはL」のために行っているように、「lT1.teacher」を使用して教師のテーブルに参加する必要があります.lessonTeacher '。 – Priyesh

+0

FWIW JPQLは "SELECT s"で始まります。投稿されたものは無効/携帯ではありません。誰もあなたがクラスの「写真」を投稿しないことを望んでいません。関連するコードを投稿してください! –

+0

Priyeshが問題を解決したクラス –

答えて

0

問題は継承された属性ではありません。あなたはこの問題を解決するには、以下のようなあなたのクエリに(Teacherテーブルに)別の参加追加する必要があります:

Query query2 = em 
    .createQuery("FROM Semester s, IN (s.lesson) l, IN(l.lessonTeacher) lT1, lT1.teacher t WHERE t.lastname = :lastname"); 
query.setParameter("lastname", "Spooner"); 
List<Semester> resultList2 = query.getResultList(); 
for(Semester s : resultList2){ 
    System.out.println(s.getname()); 
} 
+0

なぜですか? lT1.teacher.lastnameは同じ内側句からの「lT1.teacher tを」使用するものとして結合を実行すべきです。 – Chris

+0

JPAは明示的にそれをしていないと思います。たび私は、それが明示的に参加することができなかったと私はプロパティを明示的に参加しなければならなかったことを試してみました。 – Priyesh

+0

それは仕様に応じて、使用してコレクションへの参照を持つ唯一の問題...である必要があります。参照間ではエンティティ間の内部結合が強制されます。 – Chris

関連する問題