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

tan*_*nia 6 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();
Run Code Online (Sandbox Code Playgroud)

谢谢,tania

Ale*_*øld 12

你可以在方法中使用普通if来做:

private void addRestrictionIfNotNull(Criteria criteria, String propertyName, Object value) {
    if (value != null) {
        criteria.add(Restrictions.eq(propertyName, value));
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用它:

Criteria criteria = session.createCriteria(PersonEntity.class);
addRestrictionIfNotNull(critera, "LastName", person.getLastName());
addRestrictionIfNotNull(critera, "FirstName", person.getFirstName());
addRestrictionIfNotNull(critera, "email", person.getEmail());

persons = criteria.list();
Run Code Online (Sandbox Code Playgroud)


dim*_*mas 5

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

Restrictions.or(Restrictions.and(Restrictions.isNotNull("propName"), Restrictions.eq("propName", propValue)), Restrictions.isNull("propName"));
Run Code Online (Sandbox Code Playgroud)

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

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

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