使用动态where子句hibernate

时间:2011-12-12 15:27:44

标签: 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

提前致谢

2 个答案:

答案 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,它们专为此方案而设计。创建条件查询后,您可以迭代地图并为查询添加适当的限制。