1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Select retorno em um List JPA+Hibernate + Spring MVC

Opa galera estou tentando dar um select com JPA + Hibernate Acredito que meu problema é com o Query do Lista Usuarios. Quero retornar em um JSP com um foreach a lista de todos usuários ja cadastrados. Mas quando executo a lógica não é listado nada para mim, será que pode ser na forma em que estou tentando pegar os dados na JSP ?

Minha estrutura é a seguinte

Base de dados > agenda tabela > usuario

Model : Usuario.java

package br.com.joao.agenda.modelo;

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

@Entity
public class Usuario {

    @Id
    @GeneratedValue
    private Long id;
    private String login;
    private String senha;


        public Long getId() {
        return id;
    }

    public String getLogin() {
        return login;
    }
    public void setLogin(String login) {
        this.login = login;
    }
    public String getSenha() {
        return senha;
    }
    public void setSenha(String senha) {
        this.senha = senha;
    }


}

Dao : Interface UsuarioDao

package br.com.joao.agenda.dao;

import java.util.List;

import br.com.joao.agenda.modelo.Usuario;

public interface UsuarioDao {

    void adiciona(Usuario usuario);
    void altera(Usuario usuario);
    void remove(Usuario usuario);
    List<Usuario> listaUsuario();
    Usuario buscaUsuario(Long id);

}

Dao: JpaUsuarioDao

package br.com.joao.agenda.dao;

import java.util.List;

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

import org.springframework.stereotype.Repository;

import br.com.joao.agenda.modelo.Usuario;

@Repository
public class JpaUsuarioDao implements UsuarioDao {

    @PersistenceContext
    EntityManager manager;

    @Override
    public void adiciona(Usuario usuario) {
        manager.persist(usuario);
    }

    @Override
    public void remove(Usuario usuario) {
        Usuario usuarioARemover = buscaUsuario(usuario.getId());
        manager.remove(usuarioARemover);
    }

    @Override
    public List<Usuario> listaUsuario() {
        return manager.createQuery("select u from Usuario u").getResultList();
    }

    @Override
    public Usuario buscaUsuario(Long id) {
        return manager.find(Usuario.class, id);
    }

    @Override
    public void altera(Usuario usuario) {
        manager.merge(usuario);
    }

}

Controller UsuarioController

package br.com.joao.agenda.controller;

import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;

import br.com.joao.agenda.dao.UsuarioDao;
import br.com.joao.agenda.modelo.Usuario;

@Transactional
@Controller
public class UsuarioController {

    @Autowired
    UsuarioDao dao;

    @RequestMapping("formularioCadastro")
    public String executa(){
        return "formularioCadastro";
    }


    @RequestMapping("adicionaUsuario")
    public String adiciona(Usuario usuario){
        dao.adiciona(usuario);
        return"usuario/adicionado";
    }

    @RequestMapping("listaUsuarios")
    public String lista(Model model){
        model.addAttribute("agenda", dao.listaUsuario());
        return"agenda/usuarios";
    }

}

JSP usuarios.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Lista de usuários</title>
</head>
<body>
 <table>
     <tr> 
         <th> ID </th>
         <th> Usuário </th>
         <th> Senha </th>
        </tr>
 <c:forEach items="${usuario}" var="user">
     <tr>
         <td>${user.id}</td>
         <td>${user.login}</td>
         <td>${user.senha}</td>
         </tr>
 </c:forEach>

</table>

</body>
</html>

Spring-Context

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc 
//código emitido                        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">

    <context:component-scan base-package="br.com.joao.agenda" />
    <mvc:annotation-driven />

    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

<bean id="mysqlDataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/agenda"/>
    <property name="username" value="root"/>
    <property name="password" value=""/>
</bean>

    <!-- gerenciamento de jpa pelo spring -->
    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="mysqlDataSource" />
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
        </property>
    </bean>


    <!-- gerenciamento de transações pelo spring -->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <tx:annotation-driven />



</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>agenda-contatos</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

  <servlet>
      <servlet-name>springmvc</servlet-name>
      <servlet-class>
      org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
  <init-param>
   <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/spring-context.xml
       </param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
  <servlet-name>springmvc</servlet-name>
  <url-pattern>/</url-pattern>
  </servlet-mapping>

</web-app>

Persistance.xml ( Na pasta META-INF da Resource )

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">

    <persistence-unit name="agenda">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>br.com.joao.agenda.modelo.Usuario</class>
        <class>br.com.joao.agenda.modelo.Contatos</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/agenda" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>

    </persistence-unit>

</persistence>

quando faço no caso

http://localhost:8080/agenda-contatos/listaUsuarios é me retornado apenas o

ID Usuário Senha

Sem a consulta ter sido feita ( No console quando chamo a página é gerado o seguinte código para mim )

Hibernate: 
    select
        usuario0_.id as id1_1_,
        usuario0_.login as login2_1_,
        usuario0_.senha as senha3_1_ 
    from
        Usuario usuario0_

como faria pra exibir as informações na tela ?

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

2 respostas

Não é a resposta que estava procurando? Procure outras perguntas com as tags jpa hibernate java java-ee orientação-a-objetos dao spring spring-mvc ou faça a sua própria pergunta.