7
respostas

Erro ao Persistir dados

Já fiz de tudo, e mesmo assim não estou persistindo os dados na tabela produto_preco. Já troquei tudo, refiz o passo a passo, e mesmo assim no momento de gravar, não grava nada!

segue o meu código abaixo: CLASSE PRODUTO:

@Entity
public class Produto {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    private String titulo;
    private String descricao;
    private int paginas;

    @ElementCollection
    private List<Preco> precos;

    public String getTitulo() {
        return titulo;
    }
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
    public String getDescricao() {
        return descricao;
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    public int getPaginas() {
        return paginas;
    }
    public void setPaginas(int paginas) {
        this.paginas = paginas;
    }

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public List<Preco> getPreco() {
        return precos;
    }
    public void setPreco(List<Preco> precos) {
        this.precos = precos;
    }
    @Override
    public String toString() {

        return "Produto: [Titulo "+ titulo + "], [Descricao " + descricao + "], [Paginas " + 
        paginas + "]";
    }

CLASSE PREÇO:

@Embeddable
public class Preco {

    private BigDecimal valor;
    private TipoPreco tipo;

    public BigDecimal getValor() {
        return valor;
    }
    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }
    public TipoPreco getTipo() {
        return tipo;
    }
    public void setTipo(TipoPreco tipo) {
        this.tipo = tipo;
    }
}

E O MEU JSP:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Livros de Java, Android, iPhone, Ruby, PHP e muito mais - Casa do Código</title>
</head>
<body>
    <form action="/casadocodigo/produtos" method="post">
        <div>
            <label>Título</label> <input type="text" name="titulo" />
        </div>
        <div>
            <label>Descrição</label>
            <textarea rows="10" cols="20" name="descricao"></textarea>
        </div>
        <div>
            <label>Páginas</label> 
            <input type="text" name="paginas" />
        </div>

        <c:forEach items="${tipos}" var="tipoPreco" varStatus="status">
        <div>
            <label>${tipoPreco}</label>
            <input type="text" name="precos[${status.index}].valor" />
            <input type="hidden" name="precos[${status.index}].tipo" value="${tipoPreco}" />
        </div>
    </c:forEach>
        <button type="submit">Cadastrar</button>    
    </form>
</body>
</html>

Já revirei o meu jsp também e não consegui persistir. Tem alguma coisa que estou fazendo de errado?

7 respostas

Bom dia Tassiano, as informações estão indo do jsp para o controller?

Bom dia Guilherme Romão Bem eu estou fazendo que o jsp seja persistido passando pelo controller, segue a minha servlet do Controller:

@Controller
public class ProdutosController {


    @Autowired
    private ProdutoDAO produtoDao;


    @RequestMapping("/produtos")
    public String gravar(Produto produto) {
        System.out.println(produto);
        produtoDao.gravar(produto);
        return "produtos/ok";

    }

    @RequestMapping("/produtos/form")
    public ModelAndView form() {
        ModelAndView modelAndView = new ModelAndView("produtos/form");
        modelAndView.addObject("tipos", TipoPreco.values());
        return modelAndView;
    }

Eu já alterei o atributeName do modelAndView, e mesmo assim ainda não persiste

Bom dia Guilherme Romão! Eu assisti tudo de novo e vim conferindo linha por linha e quando eu solicitei o Eclipe para gerar getter and setters, ele ainda dava a opção para gerar novamente os atributos que não estavam sendo persistidos!

Foi ai que gerei novamente e rodei o servidor, porém para a minha surpresa ele persistiu como nulo as referencias do objeto:

mysql> select * from produto_precos;

+------------+--------+------+-------+-------+

| Produto_id | precos | tipo | tipos | valor |

+------------+--------+------+-------+-------+

| 9 | NULL | 0 | NULL | 56.90 |

| 9 | NULL | 1 | NULL | 80.55 |

| 9 | NULL | 2 | NULL | 90.00 |

+------------+--------+------+-------+-------+

3 rows in set (0.00 sec)

Por que cargas d'água ele iria fazer isso?

o que está chegando no syso do seu controller?

Pode até parecer brincadeira mas não é! Olha o que esta saindo do meu console:

INFORMAÇÕES: Server startup in 17807 ms
Produto: [Titulo New Adventures Of Mr. GunBound], [Descricao A new book with great adventures of Mr. Gunbound in exploring the world], [Paginas 85]
Sat Feb 23 19:25:45 BRT 2019 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Hibernate: insert into Produto (descricao, paginas, titulo) values (?, ?, ?)
Hibernate: insert into Produto_precos (Produto_id, tipo, valor) values (?, ?, ?)
Hibernate: insert into Produto_precos (Produto_id, tipo, valor) values (?, ?, ?)
Hibernate: insert into Produto_precos (Produto_id, tipo, valor) values (?, ?, ?)

Ele somente insere os dados que eu solicito para persistência, porém na tabela ele carrega tanto a referencia da classe Produto o atributo precos e tanto a referencia da classe Preco o atributo tipos.

isso pode acontecer?????

Tassiano, desculpe a demora! Pode subir seu projeto no github para eu dar uma ohada?

Bom dia Guilherme Romão Peço desculpas pelo atraso! Segue o meu link do repositório no github! Eu subi como war file, pois assim fica mais fácil de subir para o Eclipe.

https://github.com/TassianoFernandes/casadocodigo