具有动态 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);