1

我有一个需要使用“动态”参数集的查询。但是无法意识到该怎么做,我试图不添加 where 字符串,但它给了我错误,因为参数已设置。

有小费吗?

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();
4

2 回答 2

2

可以使用条件 API以更“安全”的方式构建查询,而不是执行一堆字符串连接来创建查询。然后,您可以在单个条件检查中添加条件和值。

于 2013-10-22T22:28:44.523 回答
0

您没有在 if 条件内设置参数......也许为您连接的每个字符串设置参数?

if(codigoPaciente.compareTo("") != 0)
            {
                queryS += " and c.CodigoDoPaciente =:paciente";
            }

Query query = em.createQuery(queryS);

// etc etc...
if(codigoPaciente.compareTo("") != 0)
    query.setParameter("paciente", codigoPaciente);
于 2013-10-22T22:28:39.283 回答