Auxiliary tablet with composite PK

Asked

Viewed 35 times

0

I have a supplier 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 table Product:

@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 auxiliary table so that the product and vendor Ids were the Pks of this auxiliary class, to remove this field Id. I would like a light on this issue, what better procedure to take?

1 answer

1

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

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

Supplier class Produtopk

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 
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.