Videl
Junho 4, 2009, 8:49am
#1
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?
Videl
Junho 4, 2009, 8:59am
#4
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?
Videl
Junho 4, 2009, 9:30am
#6
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
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
}
Videl
Junho 4, 2009, 9:55am
#8
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:
Videl
Junho 4, 2009, 10:20am
#10
muito obrigada pela ajuda
vou tentar aqui e depois falo se consegui ou não
valew
Videl
Junho 4, 2009, 10:28am
#11
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?
Videl
Junho 4, 2009, 4:59pm
#12
ta dando erro
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.
Videl
Junho 5, 2009, 7:53am
#14
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!
Videl
Junho 5, 2009, 8:46am
#16
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);
Videl
Junho 5, 2009, 9:25am
#18
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;
Videl
Junho 5, 2009, 9:38am
#20
eeeeeeee
funcionou!!!
muito obrigada Rafael
agora vou para os outros métodos
valew mesmo