如何检查参数是否为空? 取决于我想要添加或不添加限制的结果
如果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
答案 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
将是您的表列名称。