2012-07-22 122 views
0

我想提前下發展搜索一個簡單的頁面中,用戶可以與以下任何字段Hibernate Search的標準

1) Student Roll no 
2) Student First name 
3) Student Last name 
4) Student date of birth 

所有字段都在StudentInformation持久化類中定義的搜索。

StudentInformation.java

Public Class StudentInformation { 


private long rollNo; 
private String firstName; 
private String lastName; 
private Date dateOfBirth; 


//getter and setters 


} 

我已創建在我所定義正在被由用戶輸入

advanceSearchVo.setRollNo 
advanceSearchVo.setFirstName 
advanceSearchVo.setLastName 
advanceSearchVo.setDateOfBirth 

我在這裏變量的值的對象(AdvanceSearchVo.java)將VO對象傳遞給DAO層。

List<StudentInformation> getAllSearchRecords = service.getAdavanceSearchRecords(advanceSearchVo); 

根據輸入的值「getAllSearchRecords」存儲從DB獲取的所有結果。

在DAO

@Override 
public List<StudentInformation> getAdavanceSearchRecords(AdvanceSearchVo advanceSearchVo) { 

     Session session = HibernateUtil.getSessionFactory().openSession(); 

     Criteria criteria = session.createCriteria(PersonInfoMasterDomain.class); 

     if(advanceSearchVo.getRollNo()!=null){ 

      criteria.add(Restrictions.eq("rollNo",advanceSearchVo.getRollNo())); 

     } 

     if(advanceSearchVo.getFirstName()!=null){ 

      criteria.add(Restrictions.eq("firstName",advanceSearchVo.getFirstName())); 

     } 

     if(advanceSearchVo.getLastName()!=null){ 

      criteria.add(Restrictions.eq("lastName",advanceSearchVo.getLastName())); 

     } 


     if(advanceSearchVo.getDateOfBirth()!=null){ 

      criteria.add(Restrictions.eq("dateOfBirth",advanceSearchVo.getDateOfBirth())); 

     } 

} 

當我rollno的基礎上,搜索(僅指定一個條件),我收到的記錄。當用戶輸入所有信息,即rollno,firstname,lastname和dob或用戶輸入rollno以外的任何字段時,我沒有收到記錄。

有人可以告訴我我要去哪裏嗎?

回答

1

而不是使用Restrictions.eq使用Restrictions.like比較字符串。在你的情況下,爲了名字和姓氏比較。

0

如果您沒有收到任何記錄,則表示數據庫中沒有記錄與條件匹配。請注意,字符串上的平等是區分大小寫和空間敏感的:它會查找完全匹配。也許你的標準或數據庫中的名稱有空格。

同樣,在日期上的平等是完全匹配。如果日期作爲時間戳存儲在數據庫中,並且類似於2012-07-22 12:43:05.757657,則傳遞2012-07-22 00:00:00.000000的日期將與數據庫中存儲的日期不匹配。