使用Hibernate Criteria实现in子查询和exists子查询
2017-04-25 11:25
375 查看
使用Criteria实现以下SQL语句的效果(in):
实现代码:
使用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。
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。
相关文章推荐
- Hibernate里面如何使用DetachedCriteriaCriteria 实现多条件分页查询
- 使用Hibernate criteria进行分页查询时,如何实现一次查询取得总记录数和分页后结果集
- Hibernate使用Criteria实现查询
- Hibernate使用Criteria实现查询
- (hibernate查询)DetachedCriteria对象创建可以不需要使用session去创建
- hibernate查询之Criteria实现子查询(GROOVY语法)
- 在Hibernate中使用多表查询的一种实现
- Hibernate-HQL、Criteria、SQL实现查询对照以及增删改
- 关于Hibernate中fatch=eager的bag集合(一个java List)使用Criteria查询出现重复记录的问题
- Hibernate中使用Criteria查询实例
- 在Hibernate中使用多表查询的一种实现
- 使用ADF-BC 实现查询功能之九:重写getCriteriaItemClause方法设置Criteria中的变量
- Hibernate 中的 DetachedCriteria查询(所有使用到的类属性必须在映射文件中存在)
- Hibernate中使用Criteria查询及注解——(Dept.java)
- Hibernate使用sql语句实现多表关联查询
- Hibernate中使用Criteria查询及注解——(Emp.hbm.xml)
- Hibernate中使用Criteria查询及注解——(HibernateUtil)
- Hibernate基础-使用Criteria进行查询
- 灵活使用Hibernate的查询对象DetachedCriteria
- 使用criteria来实现动态的查询