Estou aprendendo jpa por meio de alguns exemplos, envolvendo um carrinho de compras e itens do carrinho. Eu os defini conforme abaixo ... mas não tenho muita certeza sobre qual mapeamento usar
@Entity
class Product{
private Long id;
private String name;
...
}
@Entity
class CartItem{
private Long id;
private Product product;
private int quantity;
...
}
@Entity
class ShoppingCart{
private Long id;
@OneToMany
private Set<CartItem> cartItems;
...
}
O que não tenho certeza é como me relacionar Product and CartItem
e como definir o mappedBy
atributo. Alguém pode me dizer como fazer isso? Quais são os critérios para fazer isso? Eu estava tentando definir algo como 1 cartitem contains 1 product only
. Parece uma OneToOne
relação .Se for assim, quem mantém a relação (não é o que mappedBy
faz?). Tenho dúvidas semelhantes sobre ShoppingCart
e CartItem
também
desde já, obrigado
Um item do carrinho faz referência a um produto. Mas um único produto é referenciado por vários itens do carrinho. Portanto, é uma associação um-para-muitos.
Um carrinho de compras como vários itens, e um item faz parte de um carrinho de compras, portanto, também é uma associação um para muitos.
Quando você tem uma associação OneToMany bidirecional, o lado do proprietário da associação é sempre o lado muitos . O lado do proprietário de uma associação é o lado onde não há mappedBy
atributo. Na verdade, mappedBy
significa " Eu sou apenas o outro lado de uma associação, que já está mapeada pelo seguinte atributo ". Observe que a forma como a associação é mapeada (coluna de junção, tabela de junção) deve ser definida apenas no lado do proprietário, onde o mappedBy
atributo está ausente.
Quando você tem uma associação unidirecional, há apenas um lugar onde o mapeamento pode ser definido e, portanto, o atributo mappedBy nunca é usado.
Portanto, suas entidades devem ser mapeadas assim:
@Entity
class Product{
private Long id;
private String name;
...
}
@Entity
class CartItem{
private Long id;
@ManyToOne
private Product product;
private int quantity;
...
}
@Entity
class ShoppingCart{
private Long id;
@OneToMany
private Set<CartItem> cartItems;
...
}
Se você quiser que o item do carrinho saiba sobre o carrinho de compras de sua propriedade, sua associação se torna bidirecional e as entidades se tornam:
@Entity
class CartItem{
private Long id;
@ManyToOne
private Product product;
@ManyToOne
private ShppingCart shoppingCart;
private int quantity;
...
}
@Entity
class ShoppingCart{
private Long id;
@OneToMany(mappedBy = "shoppingCart")
private Set<CartItem> cartItems;
...
}
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras