Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

BigDecimal

Tudo funcionando numa boa no curso de Spring MVC, somente uma coisa não parece certa, na hora que estou salvando no banco os valores bigdecimais não estão sendo persistidos, ate o ENUM vai certinho menos os valores BigDecimais. Segue minha classe preco

import java.math.BigDecimal;

import javax.persistence.Embeddable;

@Embeddable
public class Preco {

    private BigDecimal preco;
    private TipoPreco tipo;

    public BigDecimal getPreco() {
        return preco;
    }
    public void setPreco(BigDecimal preco) {
        this.preco = preco;
    }
    public TipoPreco getTipo() {
        return tipo;
    }
    public void setTipo(TipoPreco tipo) {
        this.tipo = tipo;
    }

}

Segue minha classe Produto

package br.com.belissima.salao.models;

import java.util.List;

import javax.persistence.ElementCollection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class Produto {

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

    private String nome;
    private String descricao;
    private String fabricante;
    private String quantidade;

    @ElementCollection
    private List<Preco> precos;

    public int getId() {
        return id;
    }

    public void setId(int 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 String getFabricante() {
        return fabricante;
    }

    public void setFabricante(String fabricante) {
        this.fabricante = fabricante;
    }

    public String getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(String quantidade) {
        this.quantidade = quantidade;
    }

    public List<Preco> getPrecos() {
        return precos;
    }

    public void setPrecos(List<Preco> precos) {
        this.precos = precos;
    }

}

Segue minha classe ProdutoController

package br.com.belissima.salao.controllers;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import br.com.belissima.salao.daos.ProdutoDAO;
import br.com.belissima.salao.models.Produto;
import br.com.belissima.salao.models.TipoPreco;

@Controller
public class ProdutoController {

    @Autowired
    private ProdutoDAO produtoDao;

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

    @RequestMapping("/produtos")
    public String gravar(Produto produto) {
        produtoDao.gravar(produto);
        return "produtos/sucesso";
    }
}
3 respostas

Fala ai João, tudo bem ?

Acho que você precisa instanciar a lista antes de manipula-la.

    @ElementCollection
    private List<Preco> precos = new ArrayList<>();

Não funcionou apresentou mesmo resultado, acredito que seja alguma anotação no bigdecimal para o banco reconhecer seus valores para como float ou double.

solução!

Opa consegui, o erro estava na classe preco o nome do valor na classe preco estava preco, assim no formulario quando eu chamava

name="precos[${status.index}].valor"

Acontecia um erro porque o certo seria

name="precos[${status.index}].preco"

Para o spring rastrear corretamente o getter

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software