DetachedCriteria一例子

DetachedCriteria query = DetachedCriteria.forClass(SysNotice.class,"sysNotice1");
            /*定义子查询对象并命名别名*/
           DetachedCriteria querySon = DetachedCriteria.forClass(SysNoticeVisit.class,"sysNoticeVisit");
           query.setProjection(Projections.rowCount()); //查询行数
           query.add(Restrictions.eq("sysNotice1.isShow", true));
           query.add(Restrictions.eq("sysNotice1.isPublication", true));
           query.add(Restrictions.eq("sysNotice1.isCancel", false));
           query.add(Restrictions.le("sysNotice1.effectDateFrom", new Date()));
           query.add(Restrictions.ge("sysNotice1.effectDateTo", new Date()));
           querySon.add(Restrictions.eq("sysNoticeVisit.visitor.userId", getCurrentUser().getUserId()));
            /*添加子查询与主查询的主外键关联关系,若有多个条件则适当增加*/
        querySon.add(Property.forName("sysNotice1.noticeId").eqProperty("sysNoticeVisit.sysNotice"));
            /*添加子查询的查询内容,至少有一个,否则会报错,此处可以随便添加子查询的任何属性不影响主查询的数据输出。*/
           query.add(Subqueries.notExists(querySon.setProjection(Projections.property("sysNoticeVisit.visitId"))));
           ArrayList<Restrictions> arrayList = new ArrayList<Restrictions>();
           Disjunction dis = Restrictions.disjunction();
           dis.add(Restrictions.isNull("sysNotice1.sysDepartment.departmentId"));
            for (int i = 0; i < deptIds.length; i++) {
                  dis.add(Restrictions.eq("sysNotice1.sysDepartment.departmentId", deptIds[i]));
            }
           query.add(dis);
           
          Integer count=(Integer) query.getExecutableCriteria(getSession()).uniqueResult();

          
          
   sql :

Hibernate打印出的:

SELECT
count(*) AS y0_
FROM
sys_notice this_
WHERE
this_.is_show =?
AND this_.is_publication =?
AND this_.is_cancel =?
AND this_.effect_date_from <=?
AND this_.effect_date_to >=?
AND NOT EXISTS (
SELECT
sysNoticeVisit_.visit_id AS y0_
FROM
sd12345.sys_notice_visit sysNoticeVisit_
WHERE
sysNoticeVisit_.user_id =?
AND this_.notice_id = sysNoticeVisit_.notice_id
)
AND (
this_.department_id IS NULL
OR this_.department_id =?
OR this_.department_id =?
)

猜你喜欢

转载自blog.csdn.net/qq_34665176/article/details/80225903