2012-07-22 124 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的日期将与数据库中存储的日期不匹配。