0

我正在尝试开发一个简单的高级搜索页面,用户可以在其中使用以下任何字段进行搜索

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

所有字段都在 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”存储从数据库中获取的所有结果。

在 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、名字、姓氏和出生日期)或用户输入rollno 以外的任何字段时,我没有得到记录。

谁能告诉我哪里出错了?

4

2 回答 2

1

而不是使用 Restrictions.eq 使用 Restrictions.like 比较字符串。在您的情况下,用于名字和姓氏的比较。

于 2012-07-22T06:49:19.250 回答
0

如果你没有得到任何记录,那只是意味着数据库中没有记录符合条件。请注意,字符串上的相等性区分大小写和空格:它会查找完全匹配的内容。也许您的条件或数据库中的名称中有尾随空格。

同样,日期上的相等性是完全匹配的。如果日期作为时间戳存储在数据库中并且类似于 2012-07-22 12:43:05.757657,则传递 2012-07-22 00:00:00.000000 的日期将与存储在数据库中的日期不匹配。

于 2012-07-22T07:04:15.260 回答