一尘不染

使用动态where子句休眠

hibernate

我试图建立一个查询,其中基于用户选择从客户端发送一些字段。我计划根据用户的选择创建一个动态查询。尽管我可以简单地用一些Java代码来完成它,并且让hibernate为我激发该查询并返回结果。

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

(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

提前致谢


阅读 250

收藏
2020-06-20

共1个答案

一尘不染

通过使用条件,这应该不成问题。

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());
}

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

2020-06-20