简体   繁体   English

如何用 hibernate 将 map 用作外键?

[英]How to map a foreign key with hibernate?

I am writing an online store using Spring Boot ( MVC ) and hiberbate .我正在使用Spring Boot ( MVC ) 和hiberbate编写在线商店。 I have an order class where I need a Сart link.我有一个订单 class 我需要Сart链接。 But the problem is that in the database I do not have a specific Сart table, but there is a cart _products table, where the peimary key consists of two columns (as shown in the picture below.).但问题是在数据库中我没有特定的Сart表,但是有一个cart _products表,其中peimary key由两列组成(如下图所示)。 I really need a connection in the Order class, so I decided to make a Composite Primary Key at the hibernate level (and I seem to have done it), but I can't figure out what to do next.我真的需要一个Order class 的连接,所以我决定在 hibernate 级别创建一个Composite Primary Key (我似乎已经做到了),但我不知道下一步该做什么。 I am stuck?我被卡住了? Please tell me where to go?请告诉我 go 在哪里? How can I solve my problem?我该如何解决我的问题?

OrderClass:订单类别:

@Entity
@Table(name = "pg_order")
public class Order {

    // Fields
    //
    private @Id
    @GeneratedValue
    Long id;

    private String address;

    @Column(name = "phone_number")
    private String phoneNumber;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "date_order")
    private Date dateOrder;

    @Enumerated(EnumType.STRING)
    @Column(name = "order_status")
    private OrderStatus orderStatus;

    @Column(name = "total_cost")
    private BigDecimal totalCost;

    // Relationships
    //
    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

//    @OneToMany
//    @JoinColumn(name = "cart_products_pkey")
//    private Cart cart;
}

Cart:大车:

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

    @Embeddable
    @NoArgsConstructor
    @AllArgsConstructor
    static class CartId implements Serializable {

        private Long orderId;

        private Long drinkId;
    }


    // Fields
    //
    @EmbeddedId
    private CartId cartId;

    @ManyToOne(optional = false)
    @JoinColumn(name = "order_id")
    private Order order;

    @ManyToOne(optional = false)
    @JoinColumn(name = "drink_id")
    private Drink drink;

    private int count;
}

在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

If you need access to the 'DRINKS' for that order.如果您需要访问该订单的“饮料”。 You need to change the relation to Cart from the Order class.您需要从 Order class 更改与 Cart 的关系。

You have commented a relationship where ORDER just have access to one CART, since you need to access N CARTS (One to Many) you need to add a SET.您已经评论了 ORDER 只能访问一个 CART 的关系,因为您需要访问 N CARTS(一对多),您需要添加一个 SET。 Something like this:像这样的东西:

@OneToMany
@JoinColumn(name = "cart_products_pkey")
private Set<Cart> cartProducts;

Now the ORDER has a SET of CART.现在订单有一组购物车。

You can easily access to the CARTS of that ORDER with order.getCartProducts()您可以使用order.getCartProducts()轻松访问该订单的购物车

And since CART has a key to DRINK, you can easily access it.由于 CART 有 DRINK 的密钥,因此您可以轻松访问它。

Hope this can help you.希望这可以帮到你。

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

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