您好我正在编写一个标准查询来获取员工。我使用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);
答案 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
}
}