Preciso criar um relacionamento NxM onde a tabela intermediária não guarda somente as chaves primárias das tabelas do relacionamento, mas também um outro campo com valor significativo. Por exemplo, uma tabela Pedido, outra Produto e a intermediária ItemDePedido (equivale a uma classe de associação na UML), que além das chaves primárias, guardaria também um atributo ‘quantidade’. Todos os exemplos que acho na web só tem as chaves primárias.
Existe como fazer isso usando o JPA (não uso o Hibernate com EntityManager)? Se sim, como? Se não, como posso resolver o problema?
Olá!, Supondo que você tenha as classes Pedido, Produto e ItemDePedido.
Vc faz o mapeamento da classe ItemDePedido normalmente, colocando as associações com a classe Produto(@ManyToOne) e Pedido(@ManyToOne)
E na classe Pedido você relaciona (@OneToMany) com ItemDePedido.
Só uma coisa, ItemDePedido não poderia extender Produto? Assim vc “eliminaria” uma associação com Produto.
Abraços.
reolca
Olá!
O problema é que uma instância de ItemDePedido não tem um id próprio. Sua chave é composta (vinda de Pedido e Produto). Já vi alguma coisa sobre @idClass, @Embebbed, etc. Mas ainda não consegui funcionar.
A classe ItemDePedido é uma classe de associação mesmo. Não tem jeito de extender de Produto. ‘quantidade’ é um atributo que pertence ao relacionamento.
Um abração.
reolca
Só para completar a outra mensagem: por ser uma chave composta, eu não posso marcar um atributo como @manyToOne e como @Id ao mesmo tempo.