【问题标题】:Using dynamic where clause hibernate使用动态 where 子句休眠
【发布时间】:2011-12-12 15:27:44
【问题描述】:

我正在尝试构建一个查询,其中一些字段是根据用户选择从客户端发送的。 我计划根据用户的选择创建一个动态查询。尽管我可以简单地使用一些 java 代码来完成它,并让休眠为我触发该查询并返回结果。

我的问题是,我可以使用内置休眠机制来做同样的事情吗? 例如,我会得到一张地图说

(cond1:a,cond2:b,cond3:c)

唯一的区别是地图可以包含的值的数量,并且基于我想创建一个查询 喜欢

select * from demo where cond1='a' and cond2='b' and cond3='c'; and may be 
select * from demo where cond1='a' and cond2='b'; when map has only 2 values

提前致谢

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    使用criteria 应该不是问题。

    CriteriaBuilder queryBuilder = em.getCriteriaBuilder();
    CriteriaQuery query = queryBuilder.createQuery();
    Root<Demo> demo = query.from(Demo.class);
    
    Iterator it = map.entrySet().iterator();
    Map.Entry wherePair = (Map.Entry)it.next();  // This is retrieved for creating the where clause
    query.where(wherePair.getKey() + "=" + wherePair.getValue());
    
    while (it.hasNext()) {
       Map.Entry pairs = (Map.Entry)it.next();
       query.and(" " + pairs.getKey() + "=" + pairs.getValue());
    }
    

    我不能保证它会编译,但就是这样。

    【讨论】:

    • 我们如何初始化EntityManager?
    【解决方案2】:

    您可以使用Criteria queries,它们是专门为这种情况设计的。创建条件查询后,您可以遍历地图并向查询添加适当的限制。

    【讨论】:

      猜你喜欢
      • 2014-08-13
      • 2011-05-21
      • 2017-04-25
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      相关资源
      最近更新 更多