我有这样的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
答案 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)"
小心,我没有测试过这个(因为我不再需要)。但如果我这样做会在这里更新。