2014-03-24 65 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 
    } 
}