【发布时间】:2015-08-13 06:54:00
【问题描述】:
我想根据数组上的元素数量动态地将 OR 限制添加到 Hibernate 标准。
在下面的示例中,Project 是一个实体,并且是 User 实体的 @OneToMany 属性。 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 限制的方法。
我该怎么做?
【问题讨论】:
-
从一个有效但不可能的条件开始。
-
所以结构没问题,我只需要将or_exp初始化为false。但是如何正确地做到这一点呢?你能给我一个有效但不可能的条件的例子吗?
-
这就是我评论而不是回答的原因 - 我只使用原始 SQL 字符串完成此操作 :) 在原始 SQL 中,您将从
1 != 1之类的内容开始,然后添加OR语句.我不太了解 Hibernate 标准,无法给出等效标准。
标签: hibernate hibernate-criteria restriction restrictions