繁体   English   中英

我如何使用 Spring 注释将 map cart-cartItem-item 实体与 JPA 结合使用?

[英]How do I map cart-cartItem-item entities with JPA using Spring annotations?

我是 JPA 和表关系的初学者,我看过一些教程并认为以下内容是正确的(?)。 但是,如果看起来正确的话,如果更有经验的人看看下面的内容,我将不胜感激。

我有一个购物车、CartItem 和一个商品 class。一个购物车可以有很多 CartItem。 一个 CartItem 可以有一个 Item,也可以是一个 Cart 的一部分。 一个项目可以在许多 CartItems 中。

我正在尝试正确处理表之间的关系,但我希望得到一些帮助,因为它似乎不起作用。 我收到错误无法调用“java.util.List.iterator()”,因为“...Cart.getItems()”的返回值是 null。我假设这是因为我已经建立了关系我的表不正确?

大车:

@Entity
@Table(name="my_cart")
public class Cart {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="cart_id")
    private String cartId;

    @OneToMany(targetEntity = CartItem.class, cascade = CascadeType.ALL)
    @JoinColumn(name="cart_item_foreign_key")
    @Column(name="cart_items")
    private List<CartItem> cartItems;

    @Column(name="cart_total_number_of_items")
    private long totalNumberOfItems;
    @Column(name="cart_total_price")
    private double totalPrice;

// + getters and setters and constructor

购物车:

@Entity
@Table(name="cart_items")
public class CartItem {
    @Id
    @Column(name="cartitem_id")
    private String itemId;
    @Column(name="cart_item_name")
    private String productName;
    @Column(name="cart_item_description")
    private String itemDescription;
    @Column(name="cart_item_quantity")
    private int itemQuantity;
    @Column(name="cart_item_price")
    private double itemPrice;

    @ManyToOne
    Cart cart;

    @OneToOne
    private Item product;

物品:

@Entity
@Table(name="my_items")
public class Item {
    @Id
    @Column(name="item_id")
    private String itemId;
    @Column(name="item_name", nullable = false)
    private String name;
    @Column(name="item_description", nullable = false)
    private String description;
    @Column(name="item_price", nullable = false)
    private Double price;

    @OneToOne(mappedBy = "item")
    CartItem cartItem;

有更多经验的人可以用上面的表格关系为我指明正确的方向吗? 谢谢

在Cart class中,使用@JoinColumn时,可以省略@Column,@ JoinColumn中有一个name属性,就是列名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM