1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Chave Composta JPA+EclipseLink com Objeto

Discussion in 'Technology' started by Everton De Sá, Aug 2, 2020 at 2:35 PM.

  1. 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

    Login To add answer/comment
     

Share This Page