2012-05-29 70 views
0

我有以下SQL查詢,我試圖轉換爲HQL。不幸的是,外連接從來都不是我最喜歡處理的。Theta風格左外部加入HQL

SELECT DISTINCT T_EMPLOYEE.SSN, 
    T_EMPLOYEE.TRANSACTION_ID, 
    T_EMPLOYEE.NAME, 
    T_EMPLOYEE.CANCEL_DATE, 
    T_EMPLOYEE.CAN_USERID, 
    T_DEPARTMENT.LOC FROM T_EMPLOYEE, 
    T_DEPARTMENT 
WHERE (T_EMPLOYEE.DEPARTMENT_CODE = T_DEPARTMENT.CODE (+)) and 
    ((T_EMPLOYEE.SSN = :s_ssn)) 

我知道在哪裏右側的(+)符號是Oracle的老風格的外連接順序(並且由於它是在右邊的左外連接)。 T_EMPLOYEE和T_DEPARTMENT(遺留數據庫)之間也沒有外鍵關係。

兩個問題: 1. HQL中是否可以使用外部聯接(即使用= =)外部聯接而不使用外部關鍵字? 2.如果是這樣,有人可以幫我把這個轉換成HQL嗎?

傑森

回答

0

假設

class Employee 
{ 
    private Department department; 
} 
<many-to-one name="department" column="DEPARTMENT_CODE" /> 

class Department 
{ 
    private long id; 
} 
<id name="id" column="CODE" ><generator class="assigned" /></id> 

那麼你得到員工與渴望裝載部與

"FROM Employee e join fetch e.Department d WHERE e.SSN = :s_ssn" 

或者只想要

"SELECT DISTINCT e.ssn, ..., d.loc FROM Employee e left outer join e.Department d WHERE e.SSN = :s_ssn"