2014-03-24 38 views
0

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

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

嗨,任何人都可以帮助我。 – user3214269

回答

0

你可以尝试这样的事情(这只是一个例子,勾勒出它是如何可能看起来像):

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()取得结果。

+0

怎么可能为我的例子传递参数。 – user3214269

+0

您的示例不完整。源代码缺少重要的类型和变量。使其完成,也许我能够给你一个正确的答案。至于现在我不得不猜测很多,对不起。 – Harmlezz

+0

我已更新我的代码。 – user3214269

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 
    } 
}