Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 仅当参数不为null时,才休眠添加限制(等于)_Java_Hibernate - Fatal编程技术网

Java 仅当参数不为null时,才休眠添加限制(等于)

Java 仅当参数不为null时,才休眠添加限制(等于),java,hibernate,Java,Hibernate,如何检查参数是否为null? 根据结果,我想添加或不添加限制 如果person.getLastName()==null,我不想添加相关限制, 我该怎么做 persons = session.createCriteria(PersonEntity.class).add( Restrictions.eq("LastName", person.getLastName())).add( Restrictions.eq("FirstN

如何检查参数是否为null? 根据结果,我想添加或不添加限制

如果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

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

Restrictions.or(Restrictions.and(Restrictions.isNotNull("propName"), Restrictions.eq("propName", propValue)), Restrictions.isNull("propName"));
如果我理解你的正确,它会做你所期望的

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


注:我知道这看起来太模糊了,但目前我无法想象其他方法来实现这一点。

您可以使用普通方法来实现,如果在方法中:

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

所以,你可以这样做

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

如果您的
姓氏
列在表中始终为非空,您可以尝试以下操作:

String lastName = .. ;

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

这里,
last\u name
将是您的表列名。

问题是检查要匹配的给定值是否为空,而不是字段值。您的解决方案看起来不错,但它将检查数据库中“propName”字段的空值,而在这里(根据问题),将检查“propValue”字段的空值。问题是要比较的对象,而不是要在比较中使用的db字段
@param value