Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

Busca pelo ID

ola estou tentando fazer uma busca aonde o usuário informa uma id e a aplicação retorna o item com seus campos, mas o mais próximo que cheguei foi retornar uma lista inteira segue meu código para analise obs: ignorem não estar em camelCase

DAO

package br.com.bancoImpl.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import br.com.bancoImpl.model.SITE;
@Transactional
@Repository
public class SiteDAO {
     @PersistenceContext
        private EntityManager manager;

        public void gravar(SITE site){
            manager.persist(site);
        }


        /*
         * Retorna lista inteira
        @SuppressWarnings("unchecked")
        public List<SITE> lista() {

        return  manager.createQuery("FROM " + SITE.class.getName()).getResultList();
        }
         */
        public void Busca(SITE site) {
            manager.find(SITE.class, site.getSIGLA());

        }
}

Controller

package br.com.bancoImpl.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import br.com.bancoImpl.dao.SiteDAO;
import br.com.bancoImpl.model.SITE;

@Controller
public class SiteController {

     @Autowired
        private SiteDAO siteDao;
     @RequestMapping("/form")
        public String form(){
            return "/form";
        }
     @RequestMapping("/Criar")
     public String gravar(SITE site){
            System.out.println(site);
            siteDao.gravar(site);
            return "/ok";
        }
     @RequestMapping("/lista")
        public String lista(){
            return "/lista";
        }
     /*
      * Retorna lista inteira
     @RequestMapping("/Busca")
     public ModelAndView buscar(){
              List<SITE> site = siteDao.lista();
            ModelAndView modelAndView = new ModelAndView("/busca");
            modelAndView.addObject("site", site);
            System.out.println(site);
            return modelAndView;
        }
        */
     @RequestMapping("/Busca")
     public String Busca(SITE site) {

            siteDao.Busca(site);
            System.out.println(site);
         return "/busca";
     }


}

lista da busca

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <table>
    <tr>
        <td>SIGLA</td>
        <td>NOME</td>
        <td>ENDEREÇO</td>
    </tr>


        <c:forEach items="${site}" var="site">
        <tr>
            <td>${site.SIGLA}</td>
            <td>${site.NOME}</td>
            <td>${site.ENDEREÇO}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

form para busca

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <form action="/bancoImpl2/Busca" method="get">
        <div>
            <Label>Sigla</Label> <input type="text" name="SIGLA">
        </div>


        <button type="submit">Buscar</button>
    </form>

</body>
</html>
10 respostas

teria alguma aula que me ajudaria nisso? toda ajuda é bem vinda

Boa noite, Renan! Como vai?

Dá uma olhada nessa aula que ela deve te ajudar nessa questão de buscas com a JPA!

Qualquer coisa, é só falar!

Grande abraço e bons estudos, meu aluno!

Bom dia Gabriel, seguindo os exemplos ele até tenta fazer o select como deveria, porem por algum motivo ele esta trazendo tudo null, mesmo existindo a sigla digitada e também na tela do navegador ele não mostra nem um item só linha dos titulo

Hibernate: select site0_.SIGLA as SIGLA1_0_0_, site0_.ALTITUDE as ALTITUDE2_0_0_, site0_.BAIRRO as BAIRRO3_0_0_, site0_.CAMPO_TELEFÔNICA as CAMPO_TE4_0_0_, site0_.CEP as CEP5_0_0_, site0_.CHAVES as CHAVES6_0_0_, site0_.COMPLEMENTO as COMPLEME7_0_0_, site0_.CONTATO as CONTATO8_0_0_, site0_.DISTRITO as DISTRITO9_0_0_, site0_.EMAIL as EMAIL10_0_0_, site0_.EMPRESA_TERCEIRA_OEM as EMPRESA11_0_0_, site0_.ENDEREÇO as ENDEREÇ12_0_0_, site0_.ID_DETENTORA as ID_DETE13_0_0_, site0_.LATITUDE as LATITUD14_0_0_, site0_.LONGITUDE as LONGITU15_0_0_, site0_.MUNICÍPIO as MUNICÍP16_0_0_, site0_.NOME as NOME17_0_0_, site0_.OBSERVAÇÃO as OBSERVA18_0_0_, site0_.PROPRIETÁRIO as PROPRIE19_0_0_, site0_.SIGLA2 as SIGLA20_0_0_, site0_.SOLICITAÇÃO_DE_ACESSO as SOLICIT21_0_0_, site0_.TIPO_DE_CONTRATO as TIPO_DE22_0_0_, site0_.TIPO_DE_IMÓVEL as TIPO_DE23_0_0_, site0_.TIPO_DE_SITE as TIPO_DE24_0_0_, site0_.ÁREA as ÁREA25_0_0_, site0_.ÁREA_OEM as ÁREA_OE26_0_0_ from SITE site0_ where site0_.SIGLA=?
SITE [SIGLA=DEL, NOME=null, DISTRITO=null, MUNICÍPIO=null, BAIRRO=null, ENDEREÇO=null, COMPLEMENTO=null, CEP=null, LATITUDE=null, LONGITUDE=null, ALTITUDE=null, ÁREA=null, TIPO_DE_CONTRATO=null, PROPRIETÁRIO=null, ID_DETENTORA=null, SIGLA2=null, TIPO_DE_IMÓVEL=null, TIPO_DE_SITE=null, SOLICITAÇÃO_DE_ACESSO=null, CHAVES=null, ÁREA_OEM=null, CAMPO_TELEFÔNICA=null, EMAIL=null, CONTATO=null, OBSERVAÇÃO=null, EMPRESA_TERCEIRA_OEM=null]

tem alguma ideia do que poderia estar acontecendo ?

Opa, Renan! Vc poderia postar aqui o código da classe site?

segue a classe site em 2 partes

package br.com.bancoImpl.model;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class SITE implements Serializable {


    private static final long serialVersionUID = 1L;
    @Id
    private String SIGLA;
    private String NOME;
    private String DISTRITO;
    private String MUNICÍPIO;
    private String BAIRRO;
    private String ENDEREÇO;
    private String COMPLEMENTO;
    private String CEP;
    private String LATITUDE;
    private String LONGITUDE;
    private String ALTITUDE;
    private String ÁREA;
    private String TIPO_DE_CONTRATO;
    private String PROPRIETÁRIO;
    private String ID_DETENTORA;
    private String SIGLA2;
    private String TIPO_DE_IMÓVEL;
    private String TIPO_DE_SITE;
    private String SOLICITAÇÃO_DE_ACESSO;
    private String CHAVES;
    private String ÁREA_OEM;
    private String CAMPO_TELEFÔNICA;
    private String EMAIL;
    private String CONTATO;
    private String OBSERVAÇÃO;
    private String EMPRESA_TERCEIRA_OEM;

    public String getSIGLA() {
        return SIGLA;
    }
    public void setSIGLA(String sIGLA) {
        SIGLA = sIGLA;
    }
    public String getNOME() {
        return NOME;
    }
    public void setNOME(String nOME) {
        NOME = nOME;
    }
    public String getDISTRITO() {
        return DISTRITO;
    }
    public void setDISTRITO(String dISTRITO) {
        DISTRITO = dISTRITO;
    }
    public String getMUNICÍPIO() {
        return MUNICÍPIO;
    }
    public void setMUNICÍPIO(String mUNICÍPIO) {
        MUNICÍPIO = mUNICÍPIO;
    }
    public String getBAIRRO() {
        return BAIRRO;
    }
    public void setBAIRRO(String bAIRRO) {
        BAIRRO = bAIRRO;
    }
    public String getENDEREÇO() {
        return ENDEREÇO;
    }
    public void setENDEREÇO(String eNDEREÇO) {
        ENDEREÇO = eNDEREÇO;
    }
    public String getCOMPLEMENTO() {
        return COMPLEMENTO;
    }
    public void setCOMPLEMENTO(String cOMPLEMENTO) {
        COMPLEMENTO = cOMPLEMENTO;
    }
    public String getCEP() {
        return CEP;
    }
    public void setCEP(String cEP) {
        CEP = cEP;
    }
    public String getLATITUDE() {
        return LATITUDE;
    }
    public void setLATITUDE(String lATITUDE) {
        LATITUDE = lATITUDE;
    }
    public String getLONGITUDE() {
        return LONGITUDE;
    }
    public void setLONGITUDE(String lONGITUDE) {
        LONGITUDE = lONGITUDE;
    }
    public String getALTITUDE() {
        return ALTITUDE;
    }
    public void setALTITUDE(String aLTITUDE) {
        ALTITUDE = aLTITUDE;
    }
    public String getÁREA() {
        return ÁREA;
    }
    public void setÁREA(String áREA) {
        ÁREA = áREA;
    }
    public String getTIPO_DE_CONTRATO() {
        return TIPO_DE_CONTRATO;
    }
    public void setTIPO_DE_CONTRATO(String tIPO_DE_CONTRATO) {
        TIPO_DE_CONTRATO = tIPO_DE_CONTRATO;
    }
    public String getPROPRIETÁRIO() {
        return PROPRIETÁRIO;
    }
    public void setPROPRIETÁRIO(String pROPRIETÁRIO) {
        PROPRIETÁRIO = pROPRIETÁRIO;
    }
    public String getID_DETENTORA() {
        return ID_DETENTORA;
    }
    public void setID_DETENTORA(String iD_DETENTORA) {
        ID_DETENTORA = iD_DETENTORA;
    }
    public String getSIGLA2() {
        return SIGLA2;
    }
    public void setSIGLA2(String sIGLA2) {
        SIGLA2 = sIGLA2;
    }
    public String getTIPO_DE_IMÓVEL() {
        return TIPO_DE_IMÓVEL;
    }
    public void setTIPO_DE_IMÓVEL(String tIPO_DE_IMÓVEL) {
        TIPO_DE_IMÓVEL = tIPO_DE_IMÓVEL;
    }
    public String getTIPO_DE_SITE() {
        return TIPO_DE_SITE;
    }
    public void setTIPO_DE_SITE(String tIPO_DE_SITE) {
        TIPO_DE_SITE = tIPO_DE_SITE;
    }
    public String getSOLICITAÇÃO_DE_ACESSO() {
        return SOLICITAÇÃO_DE_ACESSO;
    }
    public void setSOLICITAÇÃO_DE_ACESSO(String sOLICITAÇÃO_DE_ACESSO) {
        SOLICITAÇÃO_DE_ACESSO = sOLICITAÇÃO_DE_ACESSO;
    }
    public String getCHAVES() {
        return CHAVES;
    }
    public void setCHAVES(String cHAVES) {
        CHAVES = cHAVES;
    }
    public String getÁREA_OEM() {
        return ÁREA_OEM;
    }
    public void setÁREA_OEM(String áREA_OEM) {
        ÁREA_OEM = áREA_OEM;
    }
    public String getCAMPO_TELEFÔNICA() {
        return CAMPO_TELEFÔNICA;
    }
    public void setCAMPO_TELEFÔNICA(String cAMPO_TELEFÔNICA) {
        CAMPO_TELEFÔNICA = cAMPO_TELEFÔNICA;
    }
    public String getEMAIL() {
        return EMAIL;
    }
    public void setEMAIL(String eMAIL) {
        EMAIL = eMAIL;
    }
    public String getCONTATO() {
        return CONTATO;
    }
    public void setCONTATO(String cONTATO) {
        CONTATO = cONTATO;
    }
    public String getOBSERVAÇÃO() {
        return OBSERVAÇÃO;
    }
    public void setOBSERVAÇÃO(String oBSERVAÇÃO) {
        OBSERVAÇÃO = oBSERVAÇÃO;
    }
    public String getEMPRESA_TERCEIRA_OEM() {
        return EMPRESA_TERCEIRA_OEM;
    }
    public void setEMPRESA_TERCEIRA_OEM(String eMPRESA_TERCEIRA_OEM) {
        EMPRESA_TERCEIRA_OEM = eMPRESA_TERCEIRA_OEM;
    }

    ...
...
@Override
    public String toString() {
        return "SITE [SIGLA=" + SIGLA + ", NOME=" + NOME + ", DISTRITO=" + DISTRITO + ", MUNICÍPIO="
                + MUNICÍPIO + ", BAIRRO=" + BAIRRO + ", ENDEREÇO=" + ENDEREÇO + ", COMPLEMENTO=" + COMPLEMENTO
                + ", CEP=" + CEP + ", LATITUDE=" + LATITUDE + ", LONGITUDE=" + LONGITUDE + ", ALTITUDE=" + ALTITUDE
                + ", ÁREA=" + ÁREA + ", TIPO_DE_CONTRATO=" + TIPO_DE_CONTRATO + ", PROPRIETÁRIO=" + PROPRIETÁRIO
                + ", ID_DETENTORA=" + ID_DETENTORA + ", SIGLA2=" + SIGLA2 + ", TIPO_DE_IMÓVEL=" + TIPO_DE_IMÓVEL
                + ", TIPO_DE_SITE=" + TIPO_DE_SITE + ", SOLICITAÇÃO_DE_ACESSO=" + SOLICITAÇÃO_DE_ACESSO + ", CHAVES="
                + CHAVES + ", ÁREA_OEM=" + ÁREA_OEM + ", CAMPO_TELEFÔNICA=" + CAMPO_TELEFÔNICA + ", EMAIL=" + EMAIL
                + ", CONTATO=" + CONTATO + ", OBSERVAÇÃO=" + OBSERVAÇÃO + ", EMPRESA_TERCEIRA_OEM="
                + EMPRESA_TERCEIRA_OEM + "]";
    }

}

Oi Renan,

Olhando o seu código identifiquei 2 problemas.

1) O seu método Busca na classe SiteDAO está com retorno void. Ele deve ficar assim:

public SITE Busca(SITE site) {
    return manager.find(SITE.class, site.getSIGLA());
}

2) O seu método Busca da classe SiteController tá faltando adicionar o objeto no ModelAndView. Ele deve ficar assim:

@RequestMapping("/Busca")
public ModelAndView Busca(SITE site) {
    SITE site = siteDao.Busca(site);

    ModelAndView modelAndView = new ModelAndView("/busca");
    modelAndView.addObject("site", site);

    return modelAndView;
}

opa Rodrigo blz, segui sua recomendação e aparente esta tudo certo, porem na hora de fazer a busca ele esta dando erro no foreach da jsp

ago 07, 2019 1:55:22 PM org.apache.catalina.core.ApplicationDispatcher invoke
GRAVE: Servlet.service() for servlet [jsp] threw exception
javax.servlet.jsp.JspTagException: Don't know how to iterate over supplied "items" in <forEach>
    at org.apache.taglibs.standard.tag.common.core.ForEachSupport.toForEachIterator(ForEachSupport.java:308)
...

será que é por que não estou jogando em uma lista ?

solução!

Oi Rennan,

Ah sim, como é só um elemento que estamos enviando para a página, o forEach não funciona.

Você pode adicionar ele numa lista no controller então:

@RequestMapping("/Busca")
public ModelAndView Busca(SITE site) {
    SITE site = siteDao.Busca(site);

    ModelAndView modelAndView = new ModelAndView("/busca");
    modelAndView.addObject("site", Arrays.asList(site));

    return modelAndView;
}

perfeito funcionou =D muito obrigado