[ERRO]The given object has a null identifier: org.loja.modelo.Produto

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.

[quote=wswillianss]Olá,
Estou com esse erro:


org.loja.action.AlterarProdutoAction.execute(AlterarProdutoAction.java:22)

[/quote]

Debuga neste ponto e verifica se todos os atributos de Produto estão preenchidos. Principalmente o ID.

Dica, não é necessário usar um form para cada action ex :
MostrarProdutoForm formulario = (MostrarProdutoForm)form; e
AlterarProdutoForm formulario = (AlterarProdutoForm)form;

você pode ter apenas um formulário por ex:

ProdutoForm.

Seu ID está nulo.

Vc não está passando o ID corretamente para a camada de persistência.