5
respostas

Duvidas no ManyToMany

esta certo que ele cria automaticamente uma tabela de relacionamento, mas e se no caso precisasse adicionar uma informação a mais nessa tabela criada? Exemplo: temos as classes "venda" e "produto" que representão as tabelas no banco, no caso de relacionamentos muitos para muitos, seria criada a tabela Venda_Produto. Caso eu desejasse adicionar uma informação a mais nessa tabela Venda_Produto, como poderia se resolver?

@Entity
public class Produto implements Serializable{
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "TB05_produto_seq")
    private Long id;

    private Long codigo_barras;

    private String nome;

    private Double valor_compra;

}
@Entity
public class Venda implements Serializable{
    private static final long serialVersionUID = 1L;

    @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "TB06_venda_seq")
    private Long id;

    private Double valor_total;

    private Date data_venda;
}
5 respostas

Um registro a mais? Uma coluna a mais?

Uma coluna a mais, na tabela de relacionamento.

Se a sua tabela de join "Venda_Produto" vai ter outras propriedades alem das duas chaves, exemplo a desconto individual por produto, voce tera que criar uma nova classe para o join "Venda_Produto". Com isso essa nova classe nao vai mais ser "criada" automaticamente, pois nao sera mais apenas um simple join. Voce tera que criar a classe "Venda_Produto" e ela sera: manyToMany em relacao as outras duas.

OU seja:

Tabela Produto

ID codigo_barras nome valor_compra
001 1234567879 Bolsa 5.20
002 1234567879 Calsa 15.00

Tabela Venda

ID valor_total data_venda
030 18.2 2018-10-2

Tabela "Venda_Produto"

Produto_ID Venda_ID desconto
001 030 2.00
002 030 0.00

O relacionamento entre as tabelas produto e venda se mantém como muitos pra muitos ou apenas se coloca na tabela de relacionamento?

Apenas na tabela de "relacionamento", que agora nao eh mais so de relacionamento. entao produto seria manyToMany com "Venda_Produto" e venda seria manyToMany (ou oneToMany depende de como vc controla a quantidade de produto em cada venda ) com "Venda_Produto"

A ideia eh ter uma terceira classe que possui as duas chaves, uma de produto e a outra de vendas + qualquer outro campo que vc queira.