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.
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 só dono e usuário terá um só carrinho
Usuario usuario;
@OneToMany//Pois carrinho poderá ter mais de um produto e produto terá só um carrinho
Produto produto;
}
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)
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.