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

Valores do ENUM não são inseridos no banco

O método de inserir funciona e insere os valores de produto menos o preco e seus valores do ENUM. Alguém tem alguma idéia do motivo?

Classe Preço

@Embeddable
public class Preco {

    private BigDecimal valor;
    private TipoPreco tipoPreco;


    public TipoPreco getTipoPreco() {
        return tipoPreco;
    }
    public void setTipoPreco(TipoPreco tipoPreco) {
        this.tipoPreco = tipoPreco;
    }

    public BigDecimal getValor() {
        return valor;
    }
    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }

}

Variável preco em Produto.java

@ElementCollection
    private List<Preco> preco;

Trecho do form.jsp

<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}].tipoPreco" value="${tipoPreco}">
            </div>
        </c:forEach>
5 respostas

Oi Lucas,

Faltou mapear o campo tipoPreco, ele deve ser um @Enumerated(EnumType.STRING).

Além disso, faltou instanciar esta ArrayList de Preco dentro da classe Produto.

Acredito que corrigindo estes pontos seu código deve funcionar.

Abraço!

Oi Joviane,

Coloquei o @Enumerated mas ainda não funcionou. Quando você diz instanciar a esta ArrayList, onde instanciaria? Num construtor? Porque o Spring que lida em instanciar ela, não?

Abraço!

Oi Lucas,

Pode instanciar direto no atributo.

List precos = new ArrayList<>();

Oi Joviane,

Instanciei e mesmo assim, nada. Quando dou um syso na variavel produto que vem do form é mostrado isso:

Produto [id=0, titulo=Redis, descricao=teste redis, paginas=22, preco=[]]

Como se o preço estivesse vindo vazio.

solução!

Resolvi o problema. Não tinha me tocado que na classe produto havia declarado preco e no form estava chamando precos[].

Um 's' foi o suficiente para atrapalhar tudo. Obrigado pela ajuda!