仅当参数不为null时,Hibernate才会添加限制(等于)

时间:2012-08-15 13:24:41

标签: java hibernate

如何检查参数是否为空? 取决于我想要添加或不添加限制的结果

如果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();

谢谢,tania

4 个答案:

答案 0 :(得分:12)

你可以在一个方法中使用普通的if:

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();

答案 1 :(得分:5)

您可以使用这种复杂的限制:

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

如果我理解你是正确的,它会做你期望的。

内部限制的结果 Restrictions.eq(“propName”,propValue)只有在指定的属性不为null时才会影响查询的结果。

PS。我知道它看起来太过混淆但是现在我无法想象另一种方法。

答案 2 :(得分: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();

答案 3 :(得分:0)

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

String lastName = .. ;

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

这里last_name将是您的表列名称。