Olá,
Estou com esse erro:
[b]
javax.servlet.ServletException: org.hibernate.TransientObjectException: The given object has a null identifier: org.loja.modelo.Produto
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
root cause
org.hibernate.TransientObjectException: The given object has a null identifier: org.loja.modelo.Produto
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.getUpdateId(DefaultSaveOrUpdateEventListener.java:272)
org.hibernate.event.def.DefaultUpdateEventListener.getUpdateId(DefaultUpdateEventListener.java:69)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:240)
org.hibernate.event.def.DefaultUpdateEventListener.performSaveOrUpdate(DefaultUpdateEventListener.java:56)
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
org.hibernate.impl.SessionImpl.fireUpdate(SessionImpl.java:591)
org.hibernate.impl.SessionImpl.update(SessionImpl.java:579)
org.hibernate.impl.SessionImpl.update(SessionImpl.java:571)
org.loja.dao.ProdutoDAO.update(ProdutoDAO.java:31)
org.loja.action.AlterarProdutoAction.execute(AlterarProdutoAction.java:22)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
[/b]
tenho os seguintes arquivos:
package org.loja.modelo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Produto {
@Id
@GeneratedValue
private Long id;
private String nome;
private String descricao;
private Double preco;
private Long quantidade;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Double getPreco() {
return preco;
}
public void setPreco(Double preco) {
this.preco = preco;
}
public Long getQuantidade() {
return quantidade;
}
public void setQuantidade(Long quantidade) {
this.quantidade = quantidade;
}
}
package org.loja.dao;
import java.util.List;
import org.hibernate.Session;
import org.loja.modelo.Produto;
import org.loja.util.HibernateFactory;
public class ProdutoDAO {
private Session session;
public ProdutoDAO() {
session = new HibernateFactory().getSession();
}
public void save(Produto p) {
session.beginTransaction();
session.save(p);
session.getTransaction().commit();
session.close();
}
public void delete(Produto p) {
session.beginTransaction();
session.delete(p);
session.getTransaction().commit();
session.close();
}
public void update(Produto p) {
session.update(p);
session.close();
}
@SuppressWarnings("unchecked")
public List<Produto> getList() {
return session.createCriteria(Produto.class).list();
}
public Produto search(Long id) {
return (Produto) session.load(Produto.class, id);
}
}
<%@page isELIgnored="false" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title><bean:message key="site.titulo"/></title>
</head>
<body>
<h2><bean:message key="site.titulo"/></h2>
<hr/>
<table border="0" cellspacing="4">
<tr>
<th bgcolor="#B0C4DE">Id</th>
<th bgcolor="#B0C4DE">Nome</th>
<th bgcolor="#B0C4DE">Descrição</th>
<th bgcolor="#B0C4DE">Preço</th>
<th bgcolor="#B0C4DE">Quantidade</th>
</tr>
<c:forEach var="produto" items="${produto }">
<tr>
<td bgcolor="#F0F8FF">${produto.id }</td>
<td bgcolor="#F0F8FF">${produto.nome }</td>
<td bgcolor="#F0F8FF">${produto.descricao }</td>
<td bgcolor="#F0F8FF">${produto.preco }</td>
<td bgcolor="#F0F8FF">${produto.quantidade }</td>
<td bgcolor="#F0F8FF">(<a href="removerProduto.do?produto.id=${produto.id }">remover</a>)</td>
<td bgcolor="#F0F8FF">(<a href="mostrarProduto.do?produto.id=${produto.id }">alterar</a>)</td>
</tr>
</c:forEach>
</table>
<h4><a href="index.jsp">Home</a></h4>
<hr/>
<div align="center"><bean:message key="site.copyright"/></div>
</body>
</html>
package org.loja.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.loja.dao.ProdutoDAO;
import org.loja.form.MostrarProdutoForm;
import org.loja.modelo.Produto;
public class MostrarProdutoAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
MostrarProdutoForm formulario = (MostrarProdutoForm)form;
Produto produto = formulario.getProduto();
ProdutoDAO dao = new ProdutoDAO();
Produto encontrado = dao.search(produto.getId());
request.setAttribute("produto", encontrado);
return mapping.findForward("mostrar");
}
}
<action path="/mostrarProduto" name="MostrarProdutoForm"
type="org.loja.action.MostrarProdutoAction">
<forward name="mostrar" path="/mostrarProduto.jsp"/>
</action>
<%@page isELIgnored="false" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title><bean:message key="site.titulo"/></title>
</head>
<body>
<h2><bean:message key="site.titulo"/></h2>
<hr/>
<html:form action="/alterarProduto">
Nome:<html:text property="produto.nome" value="${produto.nome }"/><br>
Descrição:<html:text property="produto.descricao" value="${produto.descricao }"/><br>
Preço:<html:text property="produto.preco" value="${produto.preco }"/><br>
Quantidade:<html:text property="produto.quantidade" value="${produto.quantidade }"/><br><br/>
<html:submit>Enviar</html:submit>
</html:form>
<hr/>
<div align="center"><bean:message key="site.copyright"/></div>
</body>
</html>
package org.loja.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.loja.dao.ProdutoDAO;
import org.loja.form.AlterarProdutoForm;
import org.loja.modelo.Produto;
public class AlterarProdutoAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
AlterarProdutoForm formulario = (AlterarProdutoForm)form;
Produto produto = formulario.getProduto();
ProdutoDAO dao = new ProdutoDAO();
dao.update(produto);
return mapping.findForward("alterar");
}
}
<action path="/alterarProduto" name="AlterarProdutoForm" input="/mostrarProduto.jsp"
type="org.loja.action.AlterarProdutoAction">
<forward name="alterar" path="/listarProduto.do"/>
</action>
o que será que pode estar errado, galera? Volto a repetir no Netbeans funfa, já no Eclipse não.