Stack Overflow em Português Asked by Everton De Sá on November 15, 2021
Estou criando uma classe de estoques onde a chave da tabela será o código do produto+local, isso para que o sistema possa controlar vários estoques do mesmo produto em locais diferentes.
Criei uma entidade chamada Estoques e outra chamada EstoquesPK ( Esta para armazenar a chave composta), porem ao executar esta retornando o erro abaixo.
The mapping [B2_COD] from the embedded ID class [class entidades.EstoquesPK] is an invalid mapping for this class. An embeddable class that is used with an embedded ID specification (attribute [id] from the source [class entidades.Estoques]) can only contain basic mappings. Either remove the non basic mapping or change the embedded ID specification on the source to be embedded.
Segue abaixo a chave composta
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
@Embeddable
public class EstoquesPK implements Serializable {
private static final long serialVersionUID = -637018809489152388L;
private Produtos B2_COD;
@Column(length = 2)
private String B2_LOCAL;
public Produtos getB2_COD() {
return B2_COD;
}
public void setB2_COD(Produtos b2_COD) {
B2_COD = b2_COD;
}
public String getB2_LOCAL() {
return B2_LOCAL;
}
public void setB2_LOCAL(String b2_LOCAL) {
B2_LOCAL = b2_LOCAL;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((B2_COD == null) ? 0 : B2_COD.hashCode());
result = prime * result + ((B2_LOCAL == null) ? 0 : B2_LOCAL.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
EstoquesPK other = (EstoquesPK) obj;
if (B2_COD == null) {
if (other.B2_COD != null)
return false;
} else if (!B2_COD.equals(other.B2_COD))
return false;
if (B2_LOCAL == null) {
if (other.B2_LOCAL != null)
return false;
} else if (!B2_LOCAL.equals(other.B2_LOCAL))
return false;
return true;
}
}
Segue Entidade que usa a chave composta
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
@Entity
public class Estoques implements Serializable {
private static final long serialVersionUID = 5999236902534007386L;
@EmbeddedId
private EstoquesPK id;
private int B2_QATU;
private double B2_CMUNIT;
private double B2_VATU;
private double B2_QFIM;
private double B2_VFIM;
@Column(length = 10)
private String B2_DTFECHA;
@Column(length = 10)
private String B2_DTULTINV;
@Column(length = 10)
private String B2_DTCADASTRO;
@Column(length = 10)
private String B2_ALTERA;
@Column(length = 10)
private String B2_DTINTEG;
public EstoquesPK getId() {
return id;
}
public String getDescric() {
return id.getB2_COD().getB1_DESC();
}
public void setId(EstoquesPK id) {
this.id = id;
}
public int getB2_QATU() {
return B2_QATU;
}
public void setB2_QATU(int b2_QATU) {
B2_QATU = b2_QATU;
}
public double getB2_CMUNIT() {
return B2_CMUNIT;
}
public void setB2_CMUNIT(double b2_CMUNIT) {
B2_CMUNIT = b2_CMUNIT;
}
public double getB2_VATU() {
return B2_VATU;
}
public void setB2_VATU(double b2_VATU) {
B2_VATU = b2_VATU;
}
public double getB2_QFIM() {
return B2_QFIM;
}
public void setB2_QFIM(double b2_QFIM) {
B2_QFIM = b2_QFIM;
}
public double getB2_VFIM() {
return B2_VFIM;
}
public void setB2_VFIM(double b2_VFIM) {
B2_VFIM = b2_VFIM;
}
public String getB2_DTFECHA() {
return B2_DTFECHA;
}
public void setB2_DTFECHA(String b2_DTFECHA) {
B2_DTFECHA = b2_DTFECHA;
}
public String getB2_DTULTINV() {
return B2_DTULTINV;
}
public void setB2_DTULTINV(String b2_DTULTINV) {
B2_DTULTINV = b2_DTULTINV;
}
public String getB2_DTCADASTRO() {
return B2_DTCADASTRO;
}
public void setB2_DTCADASTRO(String b2_DTCADASTRO) {
B2_DTCADASTRO = b2_DTCADASTRO;
}
public String getB2_ALTERA() {
return B2_ALTERA;
}
public void setB2_ALTERA(String b2_ALTERA) {
B2_ALTERA = b2_ALTERA;
}
public String getB2_DTINTEG() {
return B2_DTINTEG;
}
public void setB2_DTINTEG(String b2_DTINTEG) {
B2_DTINTEG = b2_DTINTEG;
}
}
A única coisa que estou usando diferente é que na chave composta o campo B2_COD é um objeto da classe Produtos. Ja tentei fazer este mapeamento de varias maneiras e não obtive sucesso. Por favor se algum puder me ajudar Agradeço.
Abraço
Tem vário problemas aí O primeiro, a nomenclatura não segue as convenções do Java, mas indo para o problema,
Segundo, você deveria definir um nome significativo para os atributos, diferente da coluna do BD
ex:
@Column(name = "B2_QATU")
private String nomeSignificativo;
e por fim o problema é que a EstoquesPK não deve conter outros objetos, então você vai resolver declarando assim,
@Column(name = "B2_COD")
private String idProduto;
e na classe Estoques você pode adicionar uma referência do produto mais ou menos assim
@JoinColumn(updatable = false)
@OneToOne
@JoinColumn(name = "B2_COD")
private Produto produto
Answered by Tiago Mazzucco on November 15, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP