У меня есть POJO, как это
public class Employee
{
private String name;
private int age;
// setters and getters
}
Могу ли я использовать 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 (s), который соответствует непустым свойствам POJO.
Я использую hibernate 4.3.8
Критерий примера Hibernate можно использовать для этого
Criteria criteria = session.createCriteria(Employee.class)
.add(Example.create(employeeObjWithFewFieldsSet)
.setPropertySelector(Example.NotNullPropertySelector.INSTANCE));
criteria.list();
Выше запрос широко известен как "Hibernate Query By Example (QBE)"
Опасайтесь, я не тестировал это (поскольку я больше не требую). Но обновится здесь, если я это сделаю.
вы можете сделать это с помощью API отображения java, как это
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.