Problemas com o findByNome

2 respostas
T

Bem estou querendo que apareça na tabela todas as cidades que possuam certo nome… Ex:

usando o KeyReleased num txtfield nao sei se é esse o metodo, qdo digitar a letra “a” aparece todas as cidades que possuam a letra “a” no nome, porem no meu metodo, ele soh aparece um resultado por vez…
colocando “po”, nao aparece nada, mas se digitar “por” aparece Porto Alegre, pois soh tem essa cidade com “por” no nome… » ex

metodo

private void jtfPesquisaKeyReleased(java.awt.event.KeyEvent evt) {                                        

List<Cidade> cidades = daoCidade.getCidades();
        dtm.setRowCount(0);
        for (Cidade cid : cidades) {
            String nome = cid.getNome();
            cid = daoCidade.buscaPorNome(jtfPesquisa.getText());
            if (nome.equalsIgnoreCase(cid.getNome())) {
                dtm.addRow(new Object [] { cid.getCodigo() , cid.getNome(), cid.getEstadoCodigo().getNome(), cid.getCep()});
                jtbCidade.setModel(dtm);
            }
        }
    }

no CidadeDAO

public Cidade buscaPorNome(String nome){
        Cidade cidade = null;
        try{
            if(!em.isOpen()){
                em = emf.createEntityManager();
            }
            Query query = em.createNamedQuery("Cidade.findByNome");
            nome = ("%"+nome+"%");
            query.setParameter("nome",nome);
            cidade = (Cidade)query.getSingleResult();
        }catch(NoResultException erro){
            System.out.println("Não encontrado");
        }
        return cidade;
    }

na classe cidade

@NamedQuery(name = "Cidade.findByNome", query = "SELECT c FROM Cidade c WHERE c.nome LIKE :nome")

quando nao aparece nada o erro que surge é esse:

Exception in thread "AWT-EventQueue-0" javax.persistence.NonUniqueResultException: result returns 2 elements
        at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:89)
        at org.iVitrim.dao.DAOCidade.buscaPorNome(DAOCidade.java:114)
        at org.iVitrim.telas.Tabelas_Cidades.jtfPesquisaKeyReleased(Tabelas_Cidades.java:221)
        at org.iVitrim.telas.Tabelas_Cidades.access$400(Tabelas_Cidades.java:17)
        at org.iVitrim.telas.Tabelas_Cidades$6.keyReleased(Tabelas_Cidades.java:133)
        at java.awt.Component.processKeyEvent(Component.java:5999)
.......

vlw
=]

2 Respostas

L

Então, a mensagem de erro é: NonUniqueResultException: result returns 2 elements…
O método que você esta usando para fazer a busca é: query.getSingleResult();
Você esta dizendo que ele só da certo quando retorna um unico objeto, e ai?! preciso dizer mais alguma coisa?! :stuck_out_tongue:

Le isso ai
http://java.sun.com/javaee/5/docs/api/javax/persistence/Query.html#getSingleResult()
http://java.sun.com/javaee/5/docs/api/javax/persistence/Query.html#getResultList()

T

hmmmmmmmm

correto!

obrigado pela ajuda

Criado 21 de outubro de 2007
Ultima resposta 22 de out. de 2007
Respostas 2
Participantes 2