6

パラメータが null かどうかを確認するにはどうすればよいですか? 結果に応じて、制限を追加するかしないかを決定します

person.getLastName() == null 関連する制限を追加したくない場合、どうすればよいですか?

    persons = session.createCriteria(PersonEntity.class).add(
                Restrictions.eq("LastName", person.getLastName())).add(
                Restrictions.eq("FirstName", person.getFirstName())).add(
                Restrictions.eq("email", person.getUser().getEmail()))
                .list();

ありがとう、タニア

4

4 に答える 4

12

メソッド内の場合は、通常の方法でそれを行うことができます。

private void addRestrictionIfNotNull(Criteria criteria, String propertyName, Object value) {
    if (value != null) {
        criteria.add(Restrictions.eq(propertyName, value));
    }
}

そしてそれを使用します:

Criteria criteria = session.createCriteria(PersonEntity.class);
addRestrictionIfNotNull(critera, "LastName", person.getLastName());
addRestrictionIfNotNull(critera, "FirstName", person.getFirstName());
addRestrictionIfNotNull(critera, "email", person.getEmail());

persons = criteria.list();
于 2012-08-16T07:58:22.307 に答える
4

このような複雑な制限を使用できます。

Restrictions.or(Restrictions.and(Restrictions.isNotNull("propName"), Restrictions.eq("propName", propValue)), Restrictions.isNull("propName"));

あなたが正しいことを理解すれば、あなたが期待することを行います。

内部制限Restrictions.eq("propName", propValue)の結果は、指定されたプロパティが null でない場合にのみクエリの結果に影響します。

PS。難読化しすぎているように見えることはわかっていますが、今のところ、これを行う別の方法は想像できません。

于 2012-08-15T13:52:00.657 に答える
0

So, u can do like this,

session = sessionFactory.getCurrentSession();
Criteria crit = session.createCriteria(PersonEntity.class).add(
                Restrictions.eq("FirstName", person.getFirstName())).add(
                Restrictions.eq("email", person.getUser().getEmail()));
if(person.getLastName()!=null){
crit.add(Restrictions.eq("LastName", person.getLastName()));
}
person=(PersonVO)crit.list();
于 2015-10-06T10:36:26.297 に答える