休眠 - 加入与条件在子句
问题描述:
我想加入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'
答
如果映射“tableB的”作为“zBean”一个一对多或OneToOne协会,并使用的,而不是一个标准查询HQL,你可以使用“与”子句:
select z from zBean z left join z.tableB b with b.key = 'key3'
Hibernate会产生“上”如你所期望的那样。