如何动态编写Criteria查询?

时间:2014-03-24 11:51:22

标签: java hibernate hibernate-criteria

您好我正在编写一个标准查询来获取员工。我使用Generic类型作为此方法的参数。用户可以动态地传递类所需的类。对于我的员工类,我想动态添加一些限制,如果employee是true,那么我想获取该记录,否则该记录不应该被获取。但是如果用户只提供没有任何限制的记录,那么它必须获取所有记录。

public static <T> List getRowCount(Class<T> classname) {

    Session ses = HibernateUtil.getSessionFactory().openSession();
    System.out.println("classname" + classname);
    List<SetPaginationRecords> s1 = new ArrayList<SetPaginationRecords>();
    try {
        Criteria crit1 = ses.createCriteria(classname);
        crit1.setProjection(Projections.rowCount());
        List l1 = crit1.list();
        Iterator it1 = l1.iterator();
        if (it1.hasNext()) {
            Object o = it1.next();
            totalNumberOfRecords = Integer.parseInt(o.toString());
        }
    }
}

这是我的调用方法。

 List<SetPaginationRecords> paginationrecords = PaginationClass.getRowCount(EmployeeEntity.class);
        request.setAttribute("paginationrecords", paginationrecords);

2 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情(这只是一个例子,概述它的样子):

Session session = HibernateUtil.getSessionFactory().openSession();
Criteria criteria = session.createCriteria(Employee.class);
if (userChoice.femalesOnly()) {
    criteria.add(Restrictions.eq("gender", Gender.FEMALE));
}
List<Employee> employees = criteria.list();

首先在此创建一个条件,该条件没有任何限制。这意味着将获取所有记录。然后检查用户数据,并根据给定的信息,增加标准。最后,请致电list()获取结果。

答案 1 :(得分:0)

您可以使用isAssignableFrom来确定您正在处理的对象。

public static <T> List getRowCount(Class<T> classname) {
   Criteria crit1 = ses.createCriteria(classname);

   if(Employee.class.isAssignableFrom(classname)){
      //Add some restriction to the criteria
   }
}