簡體   English   中英

休眠-有條件的加入

[英]Hibernate - Join with condition in on-clause

我想加入2個表並執行查詢:
具有列ID,數據的tableA
具有列ID,鍵的tableB

說,我在表中有一行:

id=5, data='xyz'

和tableb中的兩行:

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代碼片段:

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”中的OneToMany或OneToOne關聯,並使用HQL而不是Criteria查詢,則可以使用“ with”子句:

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

Hibernate將按照您的預期生成“ on”子句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM