0

我尝试将以下 SQL 查询转换为 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 中是否可以使用 theta 样式(即使用 =)外连接?2. 如果是这样,有人可以帮我将其转换为 HQL 吗?

杰森

4

1 回答 1

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>

然后你会得到 Employee 与渴望加载的部门

"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"
于 2012-11-06T09:03:30.053 回答