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」は 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(条件を1つだけ指定)に基づいて検索すると、レコードが取得されます。ユーザーがすべての情報 (rollno、firstname、lastname、dob) を入力するか、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 に答える