我有兩個表部門,教師,象下面這樣:JPA 2.0 NamedQuery左連接
Departments Teachers
--- ---
D_ID T_ID
Code Name
Dept (logically reference D_ID)
由於教師一些老的紀錄,以包含部門的非法值,例如,教師與部門= 5,但部門中沒有D_ID = 5。
在SQL中,我可以使用 SELECT t.*, COALESCE(d.Code, t.Dept) as Dept FROM Teachers t LEFT JOIN Departments d ON d.D_ID = t.Dept
來獲得預期的結果,但我不確定如何在JPA中使用LEFT JOIN進行操作,並將結果作爲教師實體返回。
我已經定義了教師實體和部門實體,但由於舊記錄,我不確定是否應該在教師或部門實體中定義@OneToOne/@OneToMany/@ManyToOne
關係。
class Teachers
String T_ID;
String Name;
String Dept;
@Transient
String DeptCode;
class Departments
String D_ID;
String Code;
我是一個初學者使用JPA,我使用SpringDataJPA和Hibernate的JPA 2.0。
請給予一些幫助。
我試過,但失敗。我有以下例外。它是版本問題嗎?我正在使用休眠4.2.21 引起:java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:意外的標記:在第1行附近 – Calvin
我不認爲這是一個版本問題,請嘗試刪除條件並將其放在WHERE子句中。我編輯了答案。在我的情況下,它的工作原理,但我只是發現,不建議在hql中使用JOIN ON,就像這個鏈接中所解釋的:http://stackoverflow.com/questions/12003430/hibernate-query-syntax-exception-org-休眠-HQL-AST-querysyntaxexception-U – amicoderozer