具有动态OR限制的Hibernate标准

时间:2015-05-30 12:07:57

标签: hibernate hibernate-criteria restriction restrictions

我想根据数组中元素的数量动态地将OR限制添加到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的初始化不合适。

我甚至不确定这是否是在hibernate查询上实现动态OR限制的方法。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

从一些肯定是假的东西开始。

您可以使用Restrictions.sqlRestriction使用原始SQL构建此类条件:

Criterion impossibleCriterion = Restrictions.sqlRestriction("(1=0)");
LogicalExpression or_exp = Restrictions.or(impossibleCriterion, impossibleCriterion);