2017-05-29 71 views
0

我想加入2個表,做一個查詢:
表A的列ID,數據
tableB的同列ID,關鍵
休眠 - 加入與條件在子句

說,我有一個排在表A:

id=5, data='xyz' 

和兩排表B:

id=5, key='key1' 
id=5, key='key2' 

現在我想運行下面的SQL:

select * from tablea a left outer join tableb b on (a.id = b.id and b.key='key3') 

它得到我的結果有一行:

id=5, data='xyz', key=null 

我如何能做到這一點的HibernateTemplate用?

我用下面的休眠映射文件的嘗試:

<hibernate-mapping package="de.xxx.vo"> 
<class name="zBean" table="TABLEA"> 
    <subselect> 
     SELECT 
      a.id, a.data 
     FROM 
      tablea a 
      LEFT OUTER JOIN tableb b on a.id = b.id 
    </subselect> 

    <id name="id" column="ID" type="long"/> 
    <property name="data" column="DATA" type="string" /> 
    <property name="key" column="KEY" type="string" /> 
</class> 
</hibernate-mapping> 

和該Java代碼-sniplet:

DetachedCriteria crit = DetachedCriteria.forClass(zBean.class) 
    .add(Restrictions.eq("key", "key3")); 
List<ListViewDataBean> result = hibernateTemplate.findByCriteria(crit); 

該代碼生成一個稍微不同的SQL:

select * from tablea a left outer join tableb b on (a.id = b.id) where b.key='key3' 

回答

0

如果映射「tableB的」作爲「zBean」一個一對多或OneToOne協會,並使用的,而不是一個標準查詢HQL,你可以使用「與」子句:

select z from zBean z left join z.tableB b with b.key = 'key3' 

Hibernate會產生「上」如你所期望的那樣。