1

Im having a little problem when Saving an Entity, (this problem only occurs when saving, im saying that because I can get execute the normal operation when findAll)

As I said, when saving the entity (repository.save(entity)), Im getting the follow exception

//org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.Integer' to required type 'net.lapasta.model.entity.Produto' for property 'produto'; 
//nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.Integer] to required type [net.lapasta.model.entity.Produto] for property 'produto': no matching editors or conversion strategy found

My entity is:

@Entity
@IdClass(ProdutoEstoqueRegra.PrimaryKey.class)
@Table(name = "PRODUTO_ESTOQUE_REGRA")
public class ProdutoEstoqueRegra extends BaseEntity
{
    private static final long serialVersionUID = 2977957269715314234L;

    public static class PrimaryKey extends BaseEntity
    {
        private static final long serialVersionUID = 5136771432344094321L;

        private Produto produto;
        private Produto produtoEstoque;

        public PrimaryKey()
        {

        }

        public PrimaryKey(Produto produto, Produto produtoEstoque)
        {
            this.produto = produto;
            this.produtoEstoque = produtoEstoque;
        }

        public Produto getProduto()
        {
            return produto;
        }

        public void setProduto(Produto produto)
        {
            this.produto = produto;
        }

        public Produto getProdutoEstoque()
        {
            return produtoEstoque;
        }

        public void setProdutoEstoque(Produto produtoEstoque)
        {
            this.produtoEstoque = produtoEstoque;
        }

        @Override
        public int hashCode()
        {
            final int prime = 31;
            int result = 1;

            result += prime * result + (produto == null ? 0 : produto.getProdutoId() == null ? 0 : produto.getProdutoId().hashCode());
            result += prime * result + (produtoEstoque == null ? 0 : produtoEstoque.getProdutoId() == null ? 0 : produtoEstoque.getProdutoId().hashCode());

            return result;
        }

        @Override
        public boolean equals(Object object)
        {
            if(this == object)
            {
                return true;
            }

            if(!(object instanceof ProdutoEstoqueRegra))
            {
                return false;
            }

            ProdutoEstoqueRegra produtoEstoqueRegra = (ProdutoEstoqueRegra) object;

            if(produto == null)
            {
                if(produtoEstoqueRegra.getProduto() != null)
                {
                    return false;
                }
            }
            else if(produto.getProdutoId() == null)
            {
                if(produtoEstoqueRegra.getProduto().getProdutoId() != null)
                {
                    return false;
                }
            }
            else if(!produto.equals(produtoEstoqueRegra.getProduto()))
            {
                return false;
            }

            if(produtoEstoque == null)
            {
                if(produtoEstoqueRegra.getProdutoEstoque() != null)
                {
                    return false;
                }
            }
            else if(produtoEstoque.getProdutoId() == null)
            {
                if(produtoEstoqueRegra.getProdutoEstoque().getProdutoId() != null)
                {
                    return false;
                }
            }
            else if(!produtoEstoque.getProdutoId().equals(produtoEstoqueRegra.getProdutoEstoque().getProdutoId()))
            {
                return false;
            }

            return true;
        }
    }

    @Id
    @ManyToOne
    @JoinColumn(name = "ID_PRODUTO")
    private Produto produto;

    @Id
    @ManyToOne
    @JoinColumn(name = "ID_PRODUTO_ESTOQUE")
    private Produto produtoEstoque;

    @Column(name = "QUANTIDADE")
    private BigDecimal quantidade;
}
Davi Arimateia
  • 717
  • 6
  • 15
  • Try save it using ProdutoRepository, you can see example from here http://stackoverflow.com/questions/39185977/failed-to-convert-request-element-in-entity-with-idclass/42592560#42592560 – jefry jacky Mar 04 '17 at 06:01

1 Answers1

1

I just got the same problem...and i solved it by myself last :) In your case, i assume Produto's id type is Long, u need change your PrimaryKey class like following:

public static class PrimaryKey extends BaseEntity
{
    private static final long serialVersionUID = 5136771432344094321L;

    private Long produto;
    private Long produtoEstoque;

    public PrimaryKey()
    {

    }

    public PrimaryKey(Long produto, Long produtoEstoque)
    {
        this.produto = produto;
        this.produtoEstoque = produtoEstoque;
    }

    public Long getProduto()
    {
        return produto;
    }

    public void setProduto(Long produto)
    {
        this.produto = produto;
    }

    public Long getProdutoEstoque()
    {
        return produtoEstoque;
    }

    public void setProdutoEstoque(Long produtoEstoque)
    {
        this.produtoEstoque = produtoEstoque;
    }

    //...
}
qfrank
  • 262
  • 3
  • 14