![](/img/trans.png)
[英]Spring JPA: primary key is a foreign key - This class does not define an IdClass
[英]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.