2015-01-09 140 views
1

當保存一個實體時,(這個問題只發生在保存時,即時通訊說,因爲我可以在findAll時執行正常操作)Im有點問題休眠 - @IdClass @ManyToOne - 主鍵也是外鍵

正如我所說的,節省了實體(repository.save(實體))時,即時得到後續例外

//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; 
} 
+0

嘗試使用ProdutoRepository, 保存它,你可以從這裏HTTP見例如: //stackoverflow.com/questions/39185977/failed-to-convert-request-element-in-entity-with-idclass/42592560#42592560 – 2017-03-04 06:01:53

回答

1

我剛剛得到了同樣的問題.. 。和我由我自己解決了它最後:) 在你的情況,我認爲Produto的ID類型是龍,u需要改變你的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; 
    } 

    //... 
}