Dúvida JPA

8 respostas
jpajavahibernate
M

Pessoal, estou com uma dúvida sobre mapeamentos de entidades e gostaria da ajuda de vocês.
A situação é a seguinte, estou mapeando uma classe ‘carrinho’ que possui uma chave composta de cliente e produto (Embeddable).
FIz a seguinte forma. criei uma classe @Embeddable a parte chamada CarrinhoPK onde recebe dois atributos sendo eles String email e long produto_id;

Sobre os atributos de negrito estou com uma dúvida se eles deveriam ser do tipo Usuario usuario(para email), e Produto produto_id (Para produto), ou seja atributos da sua respectiva classe e não atributos do tipo das chaves das suas classes.

Qual das duas formas é correta?

8 Respostas

jonathan.sky

Sim, Usuario usuario e Produto produto, ficaria assim. Não precisa de chave composta nesse caso. Pois carrinho será encontrado pelo dono do carrinho, acredito*, não?

class Carrinho {
    @OneToOne//Carrinho terá um  dono e usuário terá um  carrinho
    Usuario usuario;

    @OneToMany//Pois carrinho poderá ter mais de um produto e produto terá  um carrinho
    Produto produto;

    }
M

Sim será pelo dono. Mas por normalização o correto não seria fazer a chave composta?

javaflex

O que vai ganhar com essa norma?

M

Evitar redundância de produtos pro carrinho pois a quantidade por produto e controlada a partir de um capo “Quantidade”, sendo assim creio eu que normalizar desta forma inibe estes casos.

Minha maior dúvida é como faço para ter uma chave composta sendo seus campos Classes (Produto e Usuario) não String email e Long produto_id.É possível? (Sou novo com JPA)

javaflex

Nao precisa de chave composta pra evitar essa redundancia. Voce pode ter a referencia do produto e a quantidade na tabela de itens do carrinho do mesmo jeito. PK pode ser uma sequence, e o que for pra ser único cria uma unique key.

M

Perdão, não entendi muito bem.

Voce diz criar uma unique do valor que eu quero que não se repita?. Se sim, isso não iria bloquear um produto para a mesma coluna na tabela toda?.

javaflex

O pedido vai ser diferente, então vai ter mais um campo na unique.

javaflex

Exemplo:

IdItem (PK)
IdPedido (FK)
IdProduto (FK)
Quantidade

Unique key (IdPedido, IdProduto)

Criado 2 de novembro de 2017
Ultima resposta 6 de nov. de 2017
Respostas 8
Participantes 3