具有限制的Hibernate Criteria / Criterion等于POJO的非空值

时间:2015-03-20 06:04:14

标签: java hibernate criteria pojo

我有这样的POJO

public class Employee
{
  private String name;
  private int age;

  // setters and getters
}

我可以使用Criteria API来检查POJO非空值的相等性

Employee emp = new Employee();
emp.setName("Xyz");
session.createCriteria(Employee.class).add(
         Restrictions.nonNullPropertiesEqual(emp) /* Imaginary method */);

而不是

session.createCriteria(Employee.class).add(   
         Restrictions.eq("name", "Xyz"));

这样我就可以接受POJO作为方法参数并返回与POJO的非null属性匹配的POJO。

我正在使用hibernate 4.3.8

2 个答案:

答案 0 :(得分:0)

你可以使用java反射API这样做

import java.lang.reflect.Field;

private void nonNullPropertiesEqual(Object obj){
    Criteria cr = session.createCriteria(obj.getClass());
    Field[] fields = obj.getClass().getDeclaredFields();
    for (Field field : fields) {
        cr.add(Restrictions.isNotNull(field.getName()));
    }
}

然后您可以使用任何POJO

调用此方法
Employee emp = new Employee();
nonNullPropertiesEqual(emp);

这将限制非NULL属性。

答案 1 :(得分:0)

Hibernate Example Criterion可用于此

Criteria criteria = session.createCriteria(Employee.class)
        .add(Example.create(employeeObjWithFewFieldsSet)
             .setPropertySelector(Example.NotNullPropertySelector.INSTANCE));
criteria.list();

以上查询通常被称为" Hibernate查询示例(QBE)"

小心,我没有测试过这个(因为我不再需要)。但如果我这样做会在这里更新。