Auxiliary Table with Composite PK

0

I have a provider table:

@Entity(name = "tbl_fornecedor")
public class Fornecedor extends PessoaJuridica implements Serializable, Desativar {

    private static final long serialVersionUID = 1L;

    @Id
    private String cnpj;

    /*Relacionamentos*/
    @OneToMany(mappedBy = "fornecedor")
    private Set<FornecedorProduto> fornecedorProduto = new HashSet<FornecedorProduto>();


    /*Gettes and Setters*/      

}

A Product table:

@Entity(name = "tbl_produto")
public class Produto implements Serializable, Desativar {

    private static final long serialVersionUID = 1L;

    @Id
    private String codigoOriginal;

    @Column(name = "nome", nullable = false, length = 200)
    private String nome;

    @Column(name = "descricao", nullable = false, length = 200)
    private String descricao;

    @Column(name = "margem_lucro", nullable = false)
    private double margemLucro;

    @Column(name = "locacao", nullable = false, length = 200)
    private String locacao;

    @Column(name = "Ativo")
    protected boolean ativo;

    /*Relacionamentos*/
    @OneToMany(mappedBy = "produto")
    private Set<FornecedorProduto> fornecedorProduto = new HashSet<FornecedorProduto>();

    /*Getters and Setters*/
}

And the Auxiliary table:

@Entity(name = "tbl_fornecedor_produto")
   public class FornecedorProduto implements Serializable {

   private static final long serialVersionUID = 1L;

   @Id
   private long id;

   @Column(name = "preco_custo", nullable = false)
   private double precoCusto;

   @Temporal(TemporalType.TIMESTAMP)
   @Column(name = "data_registro", nullable = false)
   private Date dataRegistro = new 
   java.sql.Date(System.currentTimeMillis());

   @Column(name = "preco_atual", nullable = false)
   private boolean precoAtual;

   /*Relacionamentos*/
   @ManyToOne
   @JoinColumn(name = "cnpj_fornecedor", updatable = false)
   private Fornecedor fornecedor;

   @ManyToOne
   @JoinColumn(name = "id_produto", updatable = false)
   private Produto produto;

   /*Getters and Setters*/  
}

I wanted to change the helper table so that the product and vendor Ids were the PKs of this helper class, to remove this Id field. I would like a light on this question, what better procedure to take?

    
asked by anonymous 13.12.2018 / 16:14

1 answer

1

You can use the @Embeddable notation and create a class just to be the PK, also remove the id attributes and transfer the vendor and product attributes to the new "PK" class, it would look something like this: ProductProducer Class

import java.io.Serializable;

import javax.persistence.EmbeddedId;
import javax.persistence.Entity;

@Entity(name = "tbl_fornecedor_produto")
public class FornecedorProduto implements Serializable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    private FornecedorProdutoPK fornecedorProdutoPK;

    //get e set ...
}

SupplierProductPK class

import java.io.Serializable;

import javax.persistence.Embeddable;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

import br.com.foodadmin.model.Produto;

@Embeddable
public class FornecedorProdutoPK implements Serializable{

    private static final long serialVersionUID = 6921240056133407249L;

    @ManyToOne
    @JoinColumn(name = "id_produto", nullable=false)
    private Produto produto;

    @ManyToOne
    @JoinColumn(name = "id_fornecedor", nullable=false)
    private Fornecedor fornecedor;

    //get e set 
}
    
13.12.2018 / 17:46