Order by dinamico em JPQL
30/01/2013
0
Estou usando JPA 2.0, com EclipseLink.
"SELECT new entidades.com.ComCotacao3(c.idcodigo3, c.descricao3, c.datainc3, c.prazolancamento3, c.status3, c.qtditens3) "+ " FROM ComCotacao3 c " + " WHERE c.todosfornecedores3 = :todosfornecedores3 or" + " (c.fk_ger_grupofor3 is null or c.fk_ger_grupofor3 = :fk_ger_grupofor3) " + " ORDER BY :orderby")
Fernando Silva
Posts
31/01/2013
Danilo Gomes
Criterias têm como principal vantagem serem dinâmicas. Facilitaria bastante sua vida.
07/02/2013
Fernando Silva
No código esta a explicação.
//Aqui gostaria de passar uma lista com estes campos a serem retornados, pra ficar dinamico //Geralmente eu passo uma lista com os campos e faço um for para formar a JPQL, o que não consegui com exemplo abaixo cq.multiselect(cotRoot.get("idcodigo3"),cotRoot.get("descricao3"),cotRoot.get("datainc3"),cotRoot.get("prazolancamento3"), cotRoot.get("status3"),cotRoot.get("qtditens3")); //Para o order by esta perfeito, só no select e where que não consigo fazer um metodo dinamico. cq.orderBy(cb.asc(cotRoot.get(_pesquisa.getOrderBy()))); //Este orderby tambem tem que ser dinamico ora vai ser varios campos a serem comparados hora não ai queria passar somente //Os que vão ser comparados, por exemplo campo todosfornecedores3, tem momento que não vou compara-lo e assim vai cq.where(cb.or(cb.equal(cotRoot.get("todosfornecedores3"), _pesquisa.getListaValorPesquisa().get(0)), cb.or(cb.isNull(cotRoot.get("fk_ger_grupofor3")),cb.equal(cotRoot.get("fk_ger_grupofor3"),_pesquisa.getListaValorPesquisa().get(1)))));
07/02/2013
Fernando Silva
No código esta a explicação.
//Aqui gostaria de passar uma lista com estes campos a serem retornados, pra ficar dinamico //Geralmente eu passo uma lista com os campos e faço um for para formar a JPQL, o que não consegui com exemplo abaixo cq.multiselect(cotRoot.get("idcodigo3"),cotRoot.get("descricao3"),cotRoot.get("datainc3"),cotRoot.get("prazolancamento3"), cotRoot.get("status3"),cotRoot.get("qtditens3")); //Para o order by esta perfeito, só no select e where que não consigo fazer um metodo dinamico. cq.orderBy(cb.asc(cotRoot.get(_pesquisa.getOrderBy()))); //Este orderby tambem tem que ser dinamico ora vai ser varios campos a serem comparados hora não ai queria passar somente //Os que vão ser comparados, por exemplo campo todosfornecedores3, tem momento que não vou compara-lo e assim vai cq.where(cb.or(cb.equal(cotRoot.get("todosfornecedores3"), _pesquisa.getListaValorPesquisa().get(0)), cb.or(cb.isNull(cotRoot.get("fk_ger_grupofor3")),cb.equal(cotRoot.get("fk_ger_grupofor3"),_pesquisa.getListaValorPesquisa().get(1)))));
Corrigindo nesta linha é where inves de orderby
//Este where tambem tem que ser dinamico ora vai ser varios campos a serem comparados hora não ai queria passar somen
11/03/2013
Fernando Silva
Alem disso também passei via string os parâmetros mas complexos como data assim como o orderby.
conforme abaixo.
"SELECT new entidades.com.ComCotacao3(c.idcodigo3, c.descricao3, c.datainc3, c.prazolancamento3, c.status3, c.qtditens3) "+ " FROM ComCotacao3 c " + " WHERE c.todosfornecedores3 = :todosfornecedores3 or" + " (c.fk_ger_grupofor3 is null or c.fk_ger_grupofor3 = :fk_ger_grupofor3) " + " and (c.data >= "+stringData+")" + " ORDER BY "+stringOrderBy);
31/07/2013
José
Clique aqui para fazer login e interagir na Comunidade :)