2012-08-15 36 views
4

如何检查参数是否为空? 根据我想要添加或不添加限制的结果只有当参数不为空时,Hibernate才会添加限制(等于)

if 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

可以使用这样复杂的限制:

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

如果我理解你改正它会做你所期望的。

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

PS。我知道它似乎太混乱,但现在我无法想象另一种方式来做到这一点。

+0

问题是检查要匹配的给定值的无效性,而不是字段值。你的解决方案看起来不错,但它会检查数据库中的“propName”字段的无效性,而在此处(根据问题),将检查“propValue”是否为无效。 – 2014-05-23 09:13:55

10

你可以只用一个正常的做,如果一个方法:

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

因此,U可以这样做,

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(); 
相关问题