【发布时间】:2015-12-04 02:25:19
【问题描述】:
我猜这些问题似乎令人困惑。
库存实体
@Entity
@IdClass(InventoryPK.class)
public class Inventory {
@Id
@ManyToOne(optional = false)
@JoinColumn(name = "product_id",
referencedColumnName = "product_id")
private Product product;
@Id
@ManyToOne(optional = false)
@JoinColumn(name = "store_id",
referencedColumnName = "store_id")
private Store store;
@Column()
private int stock;
@Column(precision = 2)
private double price;
}
订单实体
@Entity
public class SalesOrder {
@Id
@Column(name = "order_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@ManyToOne(optional = false)
@JoinColumn(name = "customer_id",
referencedColumnName = "customer_id")
private Customer customer;
@ManyToOne(optional = false)
@JoinColumn(name = "store_id",
referencedColumnName = "store_id")
private Store store;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "order_date")
private Date orderDate;
@OneToMany(mappedBy = "order")
private List<OrderDetails> details;
}
订单详情实体
@Entity
@IdClass(OrderDetailsPK.class)
public class OrderDetails {
@Id
@ManyToOne(optional = false)
@JoinColumn(name = "order_id",
referencedColumnName = "order_id")
private SalesOrder order;
@Id
@ManyToOne(optional = false)
@JoinColumns({
@JoinColumn(name="product_id",
referencedColumnName="product_id"),
@JoinColumn(name="store_id",
referencedColumnName="store_id"),
})
private Inventory inventory;
@Column()
private int quantity;
}
那些实体会生成下表
订单实体
order_id | customer_id | store_id | order_date
======================================================
订单详情实体
order_id | product_id | store_id | quantity
======================================================
我可以将OrderDetails 中的store_id 链接到SalesOrder 中的store_id,这样我就不需要在OrderDetails 中指定它了吗?我的意思是表格应该如下所示。
订单实体
order_id | customer_id | store_id | order_date
======================================================
订单详情实体
order_id | product_id | quantity
=====================================
为什么?我认为我不需要在OrderDetails 中指定store_id,因为信息已经在SalesOrder 中。要获得Store,我可以使用OrderDetails#Order#Store。但是,目前我需要指定store_id,因为它是Inventory 中的PK。我可以将Inventory 的store_id 链接到Order 的那个吗?
【问题讨论】:
-
Inventry 有 store_id,OrderEntity 有 store_id。为什么要在 OrderDetails 实体中跟踪库存?
-
因为
OrderDetails是客户在商店购买的产品列表,并且每个商店的产品列表不同。我将Product的列表放在Inventory的商店中。 -
所以,让库存包含产品列表,并在 OrderDetails 中保留库存的 ID(库存 ID)。它对你有用吗?我认为这是您设计的问题。
-
所以,你的意思是我需要为
Inventory添加一个专用的PK?目前我使用product_id和store_id作为Inventory的PK,因为这两列对于每条记录都是唯一的。 -
什么是不同客户的订单,他/她从同一个 store_id 购买了相同的 product_id ?不会有冲突吗?
标签: java spring hibernate jpa spring-boot