Java Hibernate-在on子句中使用条件连接

Java Hibernate-在on子句中使用条件连接,java,hibernate,Java,Hibernate,我想联接两个表并执行查询: 带有列id、数据的表格a 带有列id、键的表B 喂,我在表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 如

我想联接两个表并执行查询:
带有列id、数据的表格a
带有列id、键的表B

喂,我在表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映射文件:

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

如果将“tableB”映射为“zBean”中的OneToMany或OneToOne关联,并使用HQL而不是条件查询,则可以使用“with”子句:

select z from zBean z left join z.tableB b with b.key = 'key3'
Hibernate将按照您的预期生成“on”子句

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