2016-03-26 24 views
0

私はHibernateを初めて使用しているので、現時点でクライアントに働いているユニークな従業員を見つけるために、SQLの下でHQLを修正することができます。可能であれば、私にチュートリアルのリンクを提供してください。条件付きの左外部結合のためのHQLの記述方法?

SQLの解析中にデータベース&からNative SQLでもレコードを受け取ることができましたが、HQL以下で使用するとレコードを受け取れませんでした。

SQL:

select distinct u.employeeid from employee u 
    inner join address ad on u.employeeid = ad.employeeid 
    left join company cp on (ad.oldcompanyid = cp.currentcompanyid and cp.wokingornot='Y') 
    left join client cl on (ad.oldcompanyid = cl.currentcompanyid and cl.wokingornot='Y') 
    where (u.lastdate is null and ad.lastdate is null) 
      and (cp.wokingornot = 'Y' or cl.wokingornot = 'Y'); 

修正してくださいHQL以下に挙げる:

public class employee { 
public Int employeeid ; 
public set<address> address; 
public Date lastdate; 
public Date Startdate; 
} 

public class address{ 
public int addressid; 
public int oldcompanyid; 
public employee employee; 
public Date lastdate; 
public Date Startdate; 
} 

public class company{ 
public int currentcompanyid; 
public string wokingornot; 
public address address; 
} 

public class client{ 
public int currentcompanyid; 
public string wokingornot; 
public address address; 
} 
+0

HQLクエリは、エンティティのマッピング方法に基づいてフレーム化されます。関連するエンティティを転記すると役立ちます。 –

答えて

0

は、見えるようになるだろう:以下

select distinct u from employee u ,address uo,company tp ,client mp 
inner join u.address uo 
left join uo.company tp with tp.wokingornot= true 
left join uo.client mp with mp.wokingornot= true 
where (u.lastdate is null and uo.lastdate is null) 
and (tp.wokingornot= true or mp.wokingornot= true); 

私はHQLを探していますエンティティをしていますもっとこのように。 EmployeeクラスからCompanyおよびClientクラスへのAddressを介してオブジェクトグラフ全体を取得します。

select distinct u from employee u 
join u.address uo 
left join uo.company tp 
left join uo.client mp 
where u.lastdate is null and uo.lastdate is null 
and (tp.wokingornot= true or mp.wokingornot= true)