0

HQL に変換しようとしている次の SQL クエリがあります。残念ながら、外部結合は私の好みではありませんでした。

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 ) )  

where の右側にある (+) 記号は、Oracle の古いスタイルの外部結合シーケンスであることを知っています (右側にあるため、左外部結合です)。T_EMPLOYEE と T_DEPARTMENT (従来のデータベース) の間にも外部キーの関係はありません。

2 つの質問: 1. シータ スタイル (つまり、= を使用) の外部結合は、外部キー関係なしで HQL で可能ですか? 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>

次に、熱心にロードされた Department を持つ 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 に答える