【问题标题】:How to map a foreign key with hibernate?如何用休眠映射外键?
【发布时间】:2020-11-17 06:07:43
【问题描述】:

我正在使用Spring Boot (MVC) 和hiberbate 编写一个在线商店。我有一个订单类,我需要一个Сart 链接。但问题是在数据库中我没有特定的Сart 表,但有一个cart _products 表,其中peimary key 由两列组成(如下图所示!)。我真的需要在Order 类中建立一个连接,所以我决定在休眠级别创建一个Composite Primary Key(我似乎已经做到了),但我不知道下一步该做什么!我被困住了。请告诉我去哪里?我该如何解决我的问题?

订单类:

@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;
}

购物车:

@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;
}

【问题讨论】:

    标签: java database postgresql spring-boot hibernate


    【解决方案1】:

    如果您需要访问该订单的“饮料”。您需要从 Order 类更改与 Cart 的关系。

    您已经评论了 ORDER 只能访问一个 CART 的关系,因为您需要访问 N CARTS(一对多),您需要添加一个 SET。像这样的:

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

    现在订单有一组购物车。

    您可以通过order.getCartProducts()轻松访问该订单的购物车

    由于 CART 有 DRINK 的密钥,您可以轻松访问它。

    希望对你有帮助。

    【讨论】:

    • 好吧,但是在表中pg_order 我没有cart_products_pkey。此 pkey 在表 cart_products 中。如何从Order 加入本专栏?
    • 如果没有关系,您可以使用 ORDER_ID 从 CART_PRODUCTS 创建 QUERY。使用 JPA 应该像 // Cart repository class List&lt;Cart&gt; findAllByOrderId (Long id) 这样现在您可以将该列表添加到 Order 类(没有 DB 关系的额外属性)或简单地逐个访问 DRINK
    猜你喜欢
    • 2011-07-26
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多