Ajuda com hibernate

pessoal, estou tentando mexer com hibernate, não estou conseguindo gravar na tabela

página 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">   
<html>   
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">   
<body>   
<form name="frmInserirESD" action="gravar" method="post">   
                  
                <table>   
                    <tr>   
                        <td>   
                            esd_num:   
                        </td>   
                        <td>   
                            <input type='text' name='esd.esd_num' value=''>   
                        </td>   
                    </tr>                      
                    <tr>   
                        <td>   
                            esd_dt:   
                        </td>   
                        <td>   
                            <input type='text' name='esd.esd_dt' value=''>   
                        </td>   
                    </tr>   
                    <tr>   
                        <td>   
                            <input name="Submit" type="submit" class="botao" value="Gravar">   
                            <input type="reset" value="Limpar">   
                               
                        </td>   
                    </tr>   
                </table>   
            </form>   
  
</body>   
</html>  

da o erro: The requested resource (/contenciosohib/gravar) is not available.

tenho o HibernateUtil.java, o hibernate.cfg.xml, o arquivo hbm.xml, o DAO e o controle…

estou a 2 dias procurando respostas na internet e não acho nada
se alguem souber como resolver agradeço

Como está o mapeamento do seu servlet?

Posta sua action!

hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>   
<!DOCTYPE hibernate-configuration PUBLIC   
      "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
      "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">   
<hibernate-configuration>   
   <session-factory>   
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>   
        <property name="hibernate.connection.password">123456</property>   
        <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/contencioso</property>   
        <property name="hibernate.connection.username">postgres</property>   
         <!-- JDBC connection pool (use the built-in) -->   
           <property name="connection.pool_size">1</property>   
        <!-- SQL dialect -->   
           <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>   
        <!-- Enable Hibernate's automatic session context management -->   
           <property name="current_session_context_class">thread</property>   
        <!-- Disable the second-level cache  -->   
           <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>   
        <!-- Echo all executed SQL to stdout -->   
           <property name="show_sql">true</property>   
        <!-- Drop and re-create the database schema on startup -->   
           <property name="hbm2ddl.auto">update</property>   
        <mapping resource="dao/contencioso.hbm.xml"/>   
    </session-factory>   
</hibernate-configuration>  

esdDAO.java

package dao;   
  
import java.util.List;   
  
import modelo.esd;   
  
import org.hibernate.Criteria;   
import org.hibernate.Session;   
import org.hibernate.criterion.Restrictions;   
  
  
public class esdDAO {   
   private int lista;   
  
   public void inserir(esd objeto) throws Exception {   
      Session session = HibernateUtil.getSessionFactory().getCurrentSession();   
      session.beginTransaction();   
      session.save(objeto);   
      session.flush();   
      session.getTransaction().commit();   
   }   
  
   public void gravar(esd objeto) throws Exception {   
      Session session = HibernateUtil.getSessionFactory().getCurrentSession();   
      session.beginTransaction();   
      session.saveOrUpdate(objeto);   
      session.flush();   
      session.getTransaction().commit();   
   }   
  
   public void alterar(esd objeto) throws Exception {   
      Session session = HibernateUtil.getSessionFactory().getCurrentSession();   
      session.beginTransaction();   
      session.update(objeto);   
      session.flush();   
      session.getTransaction().commit();   
   }   
  
   public void deletar(esd objeto) throws Exception {   
      Session session = HibernateUtil.getSessionFactory().getCurrentSession();   
      session.beginTransaction();   
      session.delete(objeto);   
      session.flush();   
      session.getTransaction().commit();   
   }   
  
   public esd procurar(String id) {   
      Session session = HibernateUtil.getSessionFactory().getCurrentSession();   
      session.beginTransaction();   
      return (esd) session.load(esd.class, id);   
   }   
  
   public static List<esd> getLista() {   
        try {   
            Session session = HibernateUtil.getSessionFactory().getCurrentSession();   
          session.beginTransaction();   
          List<esd> lista = session.createQuery("Select * From esd Order By esd_num").list();   
             
            return lista;   
        } catch (Exception e) {   
            e.printStackTrace();   
            return null;   
        }   
    }   
  
}  

controleesd.java

package controle;   
  
import java.util.List;   
  
import javax.servlet.http.HttpServletRequest;   
  
import modelo.esd;   
  
public class controleesd {   
   private esd esd;   
   private List<esd> listaesd;   
      
      public String gravar() {   
  
      esdDAO dao = new esdDAO();   
      try {   
         dao.gravar(esd);   
      } catch (Exception e) {   
         // TODO Auto-generated catch block   
         e.printStackTrace();   
  
      }   
      return "success";   
   }   
  
   public String excluir() {   
  
      esdDAO dao = new esdDAO();   
      try {   
         dao.deletar(esd);   
      } catch (Exception e) {   
         // TODO Auto-generated catch block   
         e.printStackTrace();   
      }   
      return "success";   
   }   
  
   public String editar() {   
      if (esd == null || esd.getEsd_num() == null) {   
         esd = null;   
      } else {   
         esdDAO dao = new esdDAO();   
         try {   
            esd = dao.procurar(esd.getEsd_num());   
            dao.inserir(esd);   
         } catch (Exception e) {   
            // TODO Auto-generated catch block   
            e.printStackTrace();   
         }   
      }   
      return "success";   
   }   
      
   public String listaEsd(HttpServletRequest request)  {   
         String jsp = "";   
           try {   
               List<esd> listaEsd = esdDAO.getLista();   
               if(listaEsd != null){   
                      
                  request.setAttribute("listaEsd", listaEsd);   
                   jsp = "/listaresd.jsp";       
               }else{   
                   String erro = "Nao existe registro!";   
                   request.setAttribute("erro", erro);   
                   jsp = "/erro.jsp";   
               }   
                  
           } catch (Exception e) {   
               e.printStackTrace();   
               jsp = "";   
           }   
           return jsp;   
       }   
}  

não tenho servlet, sera q é isso q falta?
não tenho experiencia

Parece que você se baseou em um exemplo de JSF (JavaServer Faces).

Pergunta: você pretende utilizá-lo?

nossa, entao devo ter misturado tudo

é q peguei uma parte de um projeto que tenho q usa hibernate e struts
a parte do list peguei de um exemplo da internet…

o q eu quero é um cadastro simples usando só hibernate
por enquanto estou tentando fazer o inserir só, e nem isso to conseguindo :frowning:

Então faça o seu exemplo com servlets mesmo, veja esse artigo do GUJ: http://www.guj.com.br/article.show.logic?id=9

Basicamente você irá modificar a sua classe controleesd (lembre-se do code conventions - primeira letra de classe Java maiúscula).

Ela deverá ficar parecida com a forma abaixo:


//imports

public class ControleEsd extends HttpServlet {

  public void doPost(HttpServletRequest request, HttpServletResponse response)  
     throws IOException, ServletException {  

   //sua implementação

}

mas da pra usar servelet e hibernate junto?
aqui no trabalho pediram pra usar o hibernate…

eu tinha esquecido do detalhe da letra maiuscula :shock:

Dá pra usar sim.

muito obrigada pela ajuda
vou tentar aqui e depois falo se consegui ou não
valew :smiley:

só mais uma pergunta
os public String gravar(), excluir, editar e listar, eu coloco dentro do
public ControleAcoes() {
super();
ou
protected void doGet
ou
protected void doPost

ou coloca fora de tudo isso?

ta dando erro :cry:

SEVERE: Servlet.service() for servlet ControleAcoes threw exception
java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity

alguem sabe o q é isso?

Como informa a exceção, você está tentando salvar ou atualizar uma entidade que está nula.

Poste o seu código.

package controle;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.Session;

import modelo.Esd;
import dao.*;

/**
 * Servlet implementation class ControleAcoes
 */

public class ControleAcoes extends HttpServlet {
	private Esd esd;
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ControleAcoes() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
				doService(request, response);
	
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
			doService(request, response);
	
					
	}

	private void doService(HttpServletRequest request,
			HttpServletResponse response) {
			EsdDAO dao = new EsdDAO();
		try {
			dao.inserir(esd);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();

		}
		
	}
}

Remova o atributo de instância esd e insira dentro do método doService.

Você terá que instanciar esse objeto antes de persistí-lo!

aiai, gravar gravou mas não o q eu coloco no campo
ta gravando numero sequencial no campo esd_num e vazio no campo esd_dt

ficou assim

private void doService(HttpServletRequest request,
			HttpServletResponse response) {
		Esd esd = new Esd();		
		EsdDAO dao = new EsdDAO();
		try {
			dao.inserir(esd);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();

		}
		
	}

Você vai ter que obter os parâmetros da página via requisição:


String nome = (String) request.getParameter("esd.nome");
String tel = (String) request.getParameter("esd.telefone");

Depois que você tiver esses parâmetros, você configura o seu objeto:


Esd esd = new Esd(nome,tel);

E depois grava no banco com o Hibernate.


session.saveOrUpdate(esd);
não aceita (String,String)

Unresolved compilation problem: 
	The constructor Esd(String, String) is undefined

manda criar no Esd.java

não aceita (String,String)

Unresolved compilation problem:
The constructor Esd(String, String) is undefined

manda criar no Esd.java

O meu exemplo foi fictício (imaginei um construtor que recebesse dois argumentos do tipo String).

Leia um pouco sobre construtores na internet.

Você pode configurar esses valores no seu objeto Esd:


esd.setNome(nome);
esd.setTelefone(telefone);

//ou

esd.nome = nome;
esd.telefone = telefone;

eeeeeeee
funcionou!!!
muito obrigada Rafael :smiley:

agora vou para os outros métodos
valew mesmo