当前位置:编程学习 > JAVA >>

子表查询条件是外表的字段,QBC如何实现。

下面是sql语句和我写的部分的QBC代码,希望有人能完善这段QBC代码。特别是
MQ_.relate_Id=this_.relate_Id这段代码如何用QBC表达不会写。
SQL代码
select * from MI_I_USER_MESSAGE this_ 
where this_.send_User<>'110'
and this_.relate_Id in 
(
select DISTINCT MQ_.relate_Id as y0_ from MI_I_MESSAGE_QUEUE MQ_ 
where MQ_.user_ID='110' AND MQ_.relate_Id=this_.relate_Id
)
AND this_.published >= 
(
select DISTINCT MQ_.join_Date as y0_ from MI_I_MESSAGE_QUEUE MQ_ 
where MQ_.user_ID='110' AND MQ_.relate_Id=this_.relate_Id
)

QBC代码
Criteria criteria = session.createCriteria(UserMessage.class,UserMessage.USER_MESSAGE_ALIES_NAME);
DetachedCriteria mqCriteria = DetachedCriteria.forClass(MessageQueue.class,MessageQueue.MESSAGE_QUEUE_ALIES_NAME);
//定义查询返回结果集的字段集合
ProjectionList projectList = Projections.projectionList();
//设置子查询MessageQueue表的返回结果的字段RelateId
projectList.add(Projections.property(MessageQueue.MESSAGE_QUEUE_ALIES_NAME+"."+MessageQueue.RELATE_ID_PRO_NAME));
//去重查询
mqCriteria.setProjection(Projections.distinct(projectList));
//设置子查询MessageQueue条件user
mqCriteria.add(Restrictions.eq(MessageQueue.USER_I_D_PRO_NAME, user));
//查询不是自己发送的消息
criteria.add(Restrictions.ne(UserMessage.SEND_USER_PRO_NAME, user));
//查询的结果要在子查询的结果集中
criteria.add(Subqueries.propertyIn(UserMessage.RELATE_ID_PRO_NAME, mqCriteria));
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,