簡體   English   中英

休眠-@IdClass @ManyToOne-主鍵也是外鍵

[英]Hibernate - @IdClass @ManyToOne - Primary key is also Foreign key

我在保存實體時遇到了一個小問題,(此問題僅在保存時發生,我說這是因為我可以在findAll時執行正常操作)

如我所說,當保存實體(repository.save(entity))時,我得到了以下異常

//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

我的實體是:

@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;
}

我只是遇到了同樣的問題...最后我自己解決了這個問題:)在您的情況下,我假設Produto的id類型是Long,您需要像下面這樣更改您的PrimaryKey類:

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;
    }

    //...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM