sql的join语句转成hql出现的问题

本文探讨了在Hibernate中使用HQL实现特定SQL JOIN语句的挑战,包括如何正确地构造左连接,并解决了生成SQL与预期不符的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我用sql语句写出了一条join语句

select distinct m.name from messagebox m inner join reply r on m.getperson_id = r.send_reply_person_id where r.send_reply_person_id=1 union
select m.name from messagebox m where m.sendperson_id=1;


但是想写成hql的时候遇到了问题,

我试了很多hql语句,比如

		//Query query = getSession().createQuery(" from Reply as o left join o.getPerson join ");

他总是生成诸如

SELECT * FROM 表A  LEFT JOIN 表B ON 表A.字段12(主键) = 表B.字段1(<set>中key的值)

比如

Hibernate: select messagebox0_.id as id1_0_, replies1_.id as id2_1_, messagebox0_.name as name1_0_, messagebox0_.content as content1_0_, messagebox0_.sendTime as sendTime1_0_, messagebox0_.sendPerson_id as sendPerson5_1_0_, messagebox0_.getPerson_id as getPerson6_1_0_, messagebox0_.collect as collect1_0_, messagebox0_.canBeReplied as canBeRep8_1_0_, messagebox0_.rubbish as rubbish1_0_, replies1_.title as title2_1_, replies1_.content as content2_1_, replies1_.PARENT_REPLY_ID as PARENT4_2_1_, replies1_.MESSAGEBOX_ID as MESSAGEBOX5_2_1_, replies1_.SEND_REPLY_PERSON_ID as SEND6_2_1_, replies1_.SEND_REPLY_TIME as SEND7_2_1_ from MessageBox messagebox0_ left outer join reply replies1_ on messagebox0_.id=replies1_.MESSAGEBOX_ID

我的hbm.xml

	<class name="MessageBox" table="MessageBox">
		<id name="id"  type="string" column="id">
		<generator class="uuid"></generator>
</id>
		  <set name="replies" lazy="false"  inverse="true">
        <key column="MESSAGEBOX_ID"/>
        <one-to-many class="Reply"/> 
    </set>

 

我需要改成SELECT * FROM 表A LEFT JOIN 表B ON 表A.字段12(非主键,且任意由自己定) = 表B.字段1(任意)

于是我在网上查看,有个兄弟遇到了同样的问题,但也没用解决好。他的问题:http://bbs.youkuaiyun.com/topics/260028474

所以改用了sqlQuery

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值