我试图建立一个查询,其中基于用户选择从客户端发送一些字段。我计划根据用户的选择创建一个动态查询。尽管我可以简单地用一些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
提前致谢
通过使用条件,这应该不成问题。
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()); }
我不能保证它会编译,但这就是想法。