我正在尝试构建一个查询,其中一些字段是根据用户选择从客户端发送的。 我正在计划根据用户的选择创建一个动态查询。虽然我可以简单地使用一些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
提前致谢
答案 0 :(得分:4)
使用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());
}
我无法保证它会编译,但那是个主意。
答案 1 :(得分:2)
您可以使用Criteria queries,它们专为此方案而设计。创建条件查询后,您可以迭代地图并为查询添加适当的限制。