2016-05-31 241 views
0

我和JPA(Eclipse的鏈接)來實現這個 Classes(我不能發佈圖片的又一)JPQL:訪問繼承屬性的查詢

現在我建立一個查詢,顯示我所有的一個特定的老師有教訓的學期。

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. 

can any1 can help?

+0

你將不得不使用「lT1.teacher」,就像你已經做了「L加入教師表.lessonTeacher」。 – Priyesh

+0

FWIW JPQL以「SELECT s」開頭;發佈的內容無效/不可移植。沒有人希望你發佈課程的「照片」。發佈相關的代碼! –

+0

請給我們顯示類別代碼 –

回答

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應該執行與在from子句中使用「lT1.teacher t」相同的內部連接。 – Chris

+0

JPA沒有明確地這樣做,我認爲。每當我嘗試過它沒有明確加入它,我不得不明確地加入屬性。 – Priyesh

+0

它應該按照規範,並且只是收集引用的問題。在引用之間強制實體之間的內部聯接。 – Chris