使用Hibernate Criteria实现in子查询和exists子查询

使用Criteria实现以下SQL语句的效果(in):

select * from
        BK_ProjectCard this_ 
    where
        this_.resCompanyId in (
            select
                this_.id as y0_ 
            from
                SYSTEM_DEPARTMENT_INFO this_
        )

实现代码:

Criteria criteria = this.getSessionFactory().getCurrentSession().createCriteria(ProjectCard.class);
		
DetachedCriteria inCriteria = DetachedCriteria.forClass(DepartmentInfo.class);
inCriteria.setProjection(Property.forName("id"));
		
criteria.add(Property.forName("resCompanyId").in(inCriteria));
	
List<ProjectCard> projectCards = criteria.list();


使用Criteria实现以下SQL语句的效果(exists):

select * from BK_ProjectCard pc where exists in(select this_.id as y0_ from SYSTEM_DEPARTMENT_INFO this_ where this_.id = pc.resCompanyId)


实现代码:

Criteria criteria = this.getSessionFactory().getCurrentSession().createCriteria(ProjectCard.class, "pc");
DetachedCriteria existsCriteria = DetachedCriteria.forClass(DepartmentInfo.class, "sdi");
existsCriteria.add(Property.forName("sdi.id").eqProperty(Property.forName("pc.resCompanyId")));
existsCriteria.add(Restrictions.like("name", "%test%"));
criteria.add(Subqueries.exists(existsCriteria.setProjection(Projections.property("sdi.id"))));
List<ProjectCard> projectCards = criteria.list();


PS:实体类中并没有建立两个对象的关联关系,仅在ProjectCard对象中创建了一个resCompanyId的属性,用于存储DepartmentInfo表的ID。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值