我正在尝试使用多个像
这样的参数来创建HQL查询result = sessionFactory.getCurrentSession().createQuery("from County where " + [0].property + "=?"+","+ c[1].property + "=?")
.setParameter(0,c [0] .value)
.setParameter(1,c [1] .value).list();
而不是这样做我试图创建一个可以处理任何数量的参数的查询,如
for(Params c:parms){`enter code here`
queryString+= c.property +" = "+c.value+",";
}
result = (State) sessionFactory.getCurrentSession()
.createQuery("from County where " +queryString)
.list().get(0);
查询看起来正确,但它说“无法执行查询”
答案 0 :(得分:1)
a)你为什么放弃使用像你使用固定大小参数的准备好的声明?
b)为什么要将c.property +" = "+c.value+",";
归结为“结果”而不是queryString?
c)逗号对所述归属的影响是什么?不应该是“和”或“或”吗?
重新评论您的答案
“a)使用多个pams而不是固定大小”
String whereClause = new String();
for (Params p : params) {
if (whereClause.isEmpty())
whereClause = " where ";
else
whereClause += " and ";
whereClause += p.property + " = ? ";
}
Query query = sessionFactory.getCurrentSession().createQuery("from County " + whereClause);
for (int i = 0; i<params.size(); i++) {
query.setParameter(i, params[i].value);
}
result = (State) query.list().get(0);
“c)即使我只有一个参数,因为使用上述代码失败了! - ”
是的,即使您有一个参数,您仍然在查询结尾处添加逗号。这不是有效的格式