Problemas na consulta a campos em branco do BD

10 respostas
J

Pessoal,

Estou precisando listar os funcionarios que possuem carro, pra isso tenho um campo com a placa do carro, ou seja, quero listar quem nao esta com esse campo vazio, usando Criteria. O problema é que tem funcionarios com o numero cadastro, outros estao com o campo null e alguns pokos estão com o campo da placa em branco. Qnd eu listo colocando a restrição de isNotNull, mostra tbm quem está com o campo em branco e qnd tento usr a restrição isNotEmpty da erro.
Alguem tem alguma ideia de como posso mostrar os funcionarios q estao com conteudo cadatrado nesse campo?

Faço essa função:
public List<Professor> listarTodosProfessoresAtivosEComCarro()
    {
        Criteria c = session.createCriteria(Professor.class);
        c.add(Restrictions.eq("situacao", "Ativo"));
        c.add(Restrictions.isNotNull("placaVeiculo"));
        c.addOrder(Order.asc("nome"));

        return c.list();
    }

10 Respostas

webdouglas

teoriacamente seria utilizando o “isNotEmpty” mesmo, qual é o erro que da usando ele?

J

Pois eh, tambem acho, tentei uasr o notEmpty e noNull, como falei, só com notNull funciona, mas não funciona da maneira que eu quero.
Não estou com o erro certo aqui, pois não estou mais no trabalho, amanha posto com ctz, mas fala alguma coisa q esse metodo q postei com notEmpety nao retorna uma lista.
Amanha confirmo.

Hebert_Coelho

Usa as duas NotNull e notEmpty mas coloca um Trim() pq aí ele limpa o espaço vazios nas que estiverem empty

J

Quando uso somente notEmpty o erro é esse:

<blockquote>javax.servlet.ServletException: org.hibernate.MappingException: Property path [catalogo.modelo.Funcionario.placaVeiculo] does not reference a collection

org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:520)

org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:427)

org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)

org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)

javax.servlet.http.HttpServlet.service(HttpServlet.java:617)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

catalogo.controle.seguranca.FiltroControleAcesso.doFilter(FiltroControleAcesso.java:72)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

root cause

org.hibernate.MappingException: Property path [catalogo.modelo.Funcionario.placaVeiculo] does not reference a collection

org.hibernate.criterion.AbstractEmptinessExpression.getQueryableCollection(AbstractEmptinessExpression.java:61)

org.hibernate.criterion.AbstractEmptinessExpression.toSqlString(AbstractEmptinessExpression.java:40)

org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:334)

org.hibernate.loader.criteria.CriteriaJoinWalker.(CriteriaJoinWalker.java:82)

org.hibernate.loader.criteria.CriteriaLoader.(CriteriaLoader.java:67)

org.hibernate.impl.SessionImpl.list(SessionImpl.java:1550)

org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)

catalogo.dao.FuncionarioDAO.listarTodosFuncionariosAtivosEComCarro(FuncionarioDAO.java:79)

catalogo.controle.actions.RelatorioCarrosAction.execute(RelatorioCarrosAction.java:68)

org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)

org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)

org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)

javax.servlet.http.HttpServlet.service(HttpServlet.java:617)

javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

catalogo.controle.seguranca.FiltroControleAcesso.doFilter(FiltroControleAcesso.java:72)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

Nao entendi como usar os dois e colocar o trim, como ficaria?

J

Poderia me exemplificar como ficaria o codigo usando notNull, notEmpty e o trim junto?

Hebert_Coelho

Coloca as condições no criteria.

Eu falo isso imaginando como se fosse um select normal mesmo.

where trim(valor) != valor and valor is not null

Quanto ao erro, não tenho como te ajudar. Desculpe! =/

J

Beleza
Ja ajudou bastante, vou ver o que faço aqui.

Valeu mesmo.

J

Nao estou conseguindo fazer isso com criteria.

J

Consegui fazer com SQL Nativo, que ficou assim:

SELECT trim(placa_veiculo) FROM `catalogo`.`colaborador` where trim(placa_veiculo) != '' AND placa_veiculo is not null

Mas não sei como fazer isso com Criteria, alguem poderia me ajudar?

J
Pessoal, resolvi. Como estou mexendo em dois DAOs diferentes, estava esquecendo de colocar as restrições do criteria nos dois, mas agora tá certo: Ficou assim:
Criteria c = session.createCriteria(Colaborador.class);
        c.add(Restrictions.eq("situacao", "Ativo"));
        //c.add(Restrictions.not(Restrictions.like("placaVeiculo", "")));
        //c.add(Restrictions.isNotNull("placaVeiculo"));
        c.add(Restrictions.ne("placaVeiculo", ""));

        c.addOrder(Order.asc("nome"));
Criado 19 de agosto de 2010
Ultima resposta 20 de ago. de 2010
Respostas 10
Participantes 3