6

如何检查参数是否为空?根据我要添加或不添加限制的结果

如果 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)的结果只有在指定属性不为空时才会影响查询结果。

PS。我知道这似乎太模糊了,但现在我无法想象另一种方法来做到这一点。

于 2012-08-15T13:52:00.657 回答
0

如果您的last_name列在表中始终不为空,您可以尝试以下操作:

String lastName = .. ;

.add(Restrictions.sqlRestriction(lastName != null ? "this_.last_name = "+ lastName : "this_.last_name is not null "))

last_name将是您的表列名称。

于 2019-03-26T02:38:08.660 回答
0

所以,你可以这样做,

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 回答