2012-08-15 50 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(); 
相關問題