我有一个需要使用“动态”参数设置的查询。 但是没有意识到怎么做,我试图不添加where字符串,但它给了我错误,因为参数是seched。
任何提示?
String queryS = "select object(c) from "
+ entityClassName + " as c " +
"where 1 = 1" ;
if(codigoPaciente.compareTo("") != 0)
{
queryS += " and c.CodigoDoPaciente =:paciente";
}
if(codServicoPrincipal.compareTo("") != 0)
queryS += " and c.codigoServicoPrincipal =:servico";
if(data != null)
queryS += " and c.codigoServicoPrincipal =:data";
if(TipoServico.compareTo("") != 0)
queryS += " and c.codigoServicoPrincipal =:tipoServico";
Query query = em.createQuery(queryS);
query.setParameter("paciente", codigoPaciente);
query.setParameter("codigoServicoPrincipal", codServicoPrincipal);
query.setParameter("data", data);
query.setParameter("tipoServico", TipoServico);
return query.getResultList();
答案 0 :(得分:2)
可以使用criteria API以更“安全”的方式构造查询,而不是通过一堆字符串连接来创建查询。然后,您可以在单个条件检查中添加条件和值。
答案 1 :(得分:0)
如果条件允许,你不是在里面设置参数......也许为你连接的每个字符串设置参数?
if(codigoPaciente.compareTo("") != 0)
{
queryS += " and c.CodigoDoPaciente =:paciente";
}
Query query = em.createQuery(queryS);
// etc etc...
if(codigoPaciente.compareTo("") != 0)
query.setParameter("paciente", codigoPaciente);