【问题标题】:Hibernate - @IdClass @ManyToOne - Primary key is also Foreign keyHibernate - @IdClass @ManyToOne - 主键也是外键
【发布时间】:2015-03-08 07:55:06
【问题描述】:

我在保存实体时遇到了一点问题,(这个问题只在保存时出现,我说是因为我可以在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;
}

【问题讨论】:

标签: spring hibernate jpa


【解决方案1】:

我也遇到了同样的问题……最后我自己解决了 :) 在您的情况下,我假设 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;
    }

    //...
}

【讨论】:

    猜你喜欢
    • 2016-11-08
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 2021-07-30
    相关资源
    最近更新 更多