【问题标题】:Theta Style Left Outer Join in HQLHQL 中的 Theta 样式左外连接
【发布时间】:2012-06-03 15:40:53
【问题描述】:

我尝试将以下 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 吗?

杰森

【问题讨论】:

    标签: hibernate hql


    【解决方案1】:

    假设

    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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-23
      • 2013-03-03
      相关资源
      最近更新 更多