Chave Composta JPA+EclipseLink com Objeto

21/07/2020

0

Ola Colegas
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
Everton Sá

Everton Sá

Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar