具有动态 OR 限制的 Hibernate 标准
Hibernate criteria with dynamic OR restrictions
我想根据数组中元素的数量向 Hibernate 标准动态添加 OR 限制。
在下面的示例中,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
的初始化不合适。
我什至不确定这是否是对休眠查询实施一组动态 OR 限制的方法。
我应该怎么做?
从肯定是错误的事情开始。
您可以使用 Restrictions.sqlRestriction 来构造这样一个条件 using raw SQL:
Criterion impossibleCriterion = Restrictions.sqlRestriction("(1=0)");
LogicalExpression or_exp = Restrictions.or(impossibleCriterion, impossibleCriterion);
我想根据数组中元素的数量向 Hibernate 标准动态添加 OR 限制。
在下面的示例中,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
的初始化不合适。
我什至不确定这是否是对休眠查询实施一组动态 OR 限制的方法。
我应该怎么做?
从肯定是错误的事情开始。
您可以使用 Restrictions.sqlRestriction 来构造这样一个条件 using raw SQL:
Criterion impossibleCriterion = Restrictions.sqlRestriction("(1=0)");
LogicalExpression or_exp = Restrictions.or(impossibleCriterion, impossibleCriterion);