Я хотел бы динамически добавлять ограничения ИЛИ к критериям Hibernate на основе количества элементов в массиве.
В приведенном ниже примере Project
— это объект, а @OneToMany
свойство объекта User
. Объект Project
имеет свойство name
. db.getSes()
предоставляет текущий Session
.
Мой текущий подход
String[] project_name_filters = {"Project Name 1","Project Name 2"};
Criteria q = db.getSes().createCriteria(User.class);
if(project_name_filters.length > 0) {
q.createAlias("project", "project");
LogicalExpression or_exp = null;
for(int ix_prj = 0 ; ix_prj < project_name_filters.length ; ix_prj++) {
or_exp = Restrictions.or (or_exp,Restrictions.eq("project.name", project_name_filters[ix_prj]));
}
q.add(or_exp);
}
@SuppressWarnings("unchecked")
List<User> users = (List<User>) q.list();
но инициализация or_exp = null
не подходит.
Я даже не уверен, что это способ реализовать динамический набор ограничений ИЛИ для запроса гибернации.
Как я должен это делать?
1 != 1
и добавить к нему операторыOR
. Я недостаточно хорошо знаю критерии Hibernate, чтобы дать эквивалент. - person fzzfzzfzz   schedule 30.05.2015