【问题标题】:Hibernate Criteria/Criterion with Restrictions equals non null values of POJOHibernate Criteria/Criterion with Restrictions 等于 POJO 的非空值
【发布时间】:2015-03-20 06:04:13
【问题描述】:

我有一个这样的 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。

我使用的是休眠 4.3.8

【问题讨论】:

    标签: java hibernate criteria pojo


    【解决方案1】:

    你可以像这样使用 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 属性施加限制。

    【讨论】:

      【解决方案2】:

      Hibernate Example Criterion 可以用于此

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

      上面的查询通常被称为“Hibernate Query By Example (QBE)”

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

      【讨论】:

        猜你喜欢
        • 2021-05-15
        • 2011-12-28
        • 1970-01-01
        • 1970-01-01
        • 2013-02-11
        • 2018-03-02
        • 1970-01-01
        • 2011-08-17
        • 1970-01-01
        相关资源
        最近更新 更多