java - Hibernate Criteria/Criterion with Restrictions 等于 POJO 的非空值

标签 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

最佳答案

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

关于java - Hibernate Criteria/Criterion with Restrictions 等于 POJO 的非空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29160376/

相关文章:

java - 如何在考虑DDD的基础上构建一个简单的REST应用( Spring / hibernate )?

java - Oracle 表同义词的 Hibernate 模式验证失败

grails - 关于Grails的新手问题 “createCriteria”

java - KafkaAvroSerializer 用于在没有 schema.registry.url 的情况下序列化 Avro

java - C++/Java递归变量初始化

hibernate - 来自 HQL 查询的 SQL 字符串?

hibernate - Grails createCriteria按hasMany上的条件排序

java - Java中不能在同一个包内继承

java - GraphQL错误: Expected a user-defined GraphQL scalar type with name 'FileUpload' but found none