boa tarde, vou postar minhas classes, e meu erro !
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Produto {
private String nome;
private String descricao;
private Double preco;
@Id @GeneratedValue
private Long id;
public void setPreco(Double preco) {
this.preco = preco;
}
public Double getPreco() {
return preco;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getDescricao() {
return descricao;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getNome() {
return nome;
}
public Long getId() {
return id;
}
}
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.caelum.vraptor.ioc.Component;
@Component//pode ser instanciada pelo vraptor sempre q for preciso
public class ProdutoDAO {
private final Session session;
public ProdutoDAO(){
session=CriadorDeSessao.getSession();
}
public void salva(Produto produto) {
Session session = CriadorDeSessao.getSession();
Transaction tx = session.beginTransaction();
session.save(produto);
tx.commit();
}
public List<Produto> listaTudo() {
return this.session.createCriteria(Produto.class).list();
//criteria-->temos acesso a diversas operações no banco de dados
}
public Produto carrega(Long id) {
return (Produto) session.load(Produto.class, id);
}
public void atualiza(Produto produto) {
Transaction tx = session.beginTransaction();
this.session.update(produto);
tx.commit();
}
public void remove(Produto produto) {
session.delete(produto);
}
public void recarrega(Produto produto) {
session.refresh(produto);
}
}
import java.util.List;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
@Resource
public class ProdutoController {
private Result i;
public List<Produto> lista() {
ProdutoDAO dao = new ProdutoDAO();
return dao.listaTudo();
//esta faendo a chamada do metodo listatudo() criado na classe ProdutoDAO
}
private final ProdutoDAO dao;
public ProdutoController(ProdutoDAO dao, Result i){//construtor q recebe uma instancia de PRODUTO
this.dao=dao;
this.i=i;
}
public void adiciona(Produto produto) {
ProdutoDAO dao = new ProdutoDAO();
dao.salva(produto);
i.redirectTo(this).lista();//this=ProdutoController.class para ocorrer
//outra requisicao na URL,previnindo q o usuario re-envie o formulario
}
public void formulario() {
}
public Produto edita(Long id){
ProdutoDAO dao = new ProdutoDAO();
return dao.carrega(id);
}
public void altera(Produto produto) {
ProdutoDAO dao = new ProdutoDAO();
dao.atualiza(produto);
i.redirectTo(this).lista();//redirecionar para minha jsp lista
}
public void remove(Long id) {
ProdutoDAO dao = new ProdutoDAO();
Produto produto = dao.carrega(id);
dao.remove(produto);
i.redirectTo(this).lista();
}
}
E minha jsp
<form action="altera">
<fieldset>
<legend>Editar Produto</legend>
<input type="hidden" name="produto.id" value="${produto.id }" />
<label for="nome">Nome:</label>
<input id="nome" type="text" name="produto.nome" value="${produto.nome }"/>
<label for="descricao">Descrição:</label>
<textarea id="descricao" name="produto.descricao">${produto.descricao }</textarea>
<label for="preco">Preço:</label>
<input id="preco" type="text" name="produto.preco" value="${produto.preco }"/>
<button type="submit">Enviar</button>
</fieldset>
</form>
Erro que ocorre : br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: org.hibernate.TransientObjectException: The given object has a null identifier: Produto