我正在尝试开发一个简单的高级搜索页面,用户可以使用以下任何字段进行搜索
1) Student Roll no
2) Student First name
3) Student Last name
4) Student date of birth
所有字段都在StudentInformation persistance类中定义。
StudentInformation.java
Public Class StudentInformation {
private long rollNo;
private String firstName;
private String lastName;
private Date dateOfBirth;
//getter and setters
}
我创建了一个值对象(AdvanceSearchVo.java),其中我定义了用户输入的变量
advanceSearchVo.setRollNo
advanceSearchVo.setFirstName
advanceSearchVo.setLastName
advanceSearchVo.setDateOfBirth
这里我将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之外的任何字段。
有谁能告诉我哪里出错了?
答案 0 :(得分:1)
而不是使用Restrictions.eq在比较字符串时使用Restrictions.like。在您的情况下,对于名字和姓氏比较。
答案 1 :(得分:0)
如果您没有获得任何记录,则只表示数据库中没有记录符合条件。请注意,字符串上的相等性区分大小写且对空间敏感:它查找完全匹配。也许您的条件或数据库中的名称都有尾随空格。
同样,日期上的相等是完全匹配。如果日期存储为数据库中的时间戳,并且类似于2012-07-22 12:43:05.757657,则传递日期2012-07-22 00:00:00.000000将与数据库中存储的日期不匹配。 / p>