【问题标题】:Hibernate criteria with dynamic OR restrictions具有动态 OR 限制的休眠条件
【发布时间】: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


【解决方案1】:

从肯定是假的东西开始。

您可以使用Restrictions.sqlRestriction 使用原始 SQL 构造这样的条件:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-03
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    相关资源
    最近更新 更多