2017-05-29 96 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会产生“上”如你所期望的那样。