【发布时间】:2016-06-07 18:23:10
【问题描述】:
假设我有一个名为 Collect 的类,它具有以下属性:
@ElementCollection
@MapKeyJoinColumn(name="product_id")
@Column(name="quantity")
@CollectionTable(joinColumns=@JoinColumn(name="order_id"))
//The value of the map stores the quantity of each product.
private Map<Product, Integer> collectedProducts;
这给了我下表:
+----------------+------------+------------+
| order_id | quantity | product_id |
+----------------+------------+------------+
| 50006 | 1 | 14 |
| 50006 | 3 | 15 |
+----------------+------------+------------+
如果我想要另一个名为“重量”的列,例如:
+----------------+------------+------------+------------+
| order_id | quantity | product_id | weight |
+----------------+------------+------------+------------+
| 50006 | 1 | 14 | 3.00 |
| 50006 | 3 | 15 | 5.00 |
+----------------+------------+------------+------------+
权重是可变的。也就是说,它不存储在“产品”表中。我想设置重量并存储在此表中。喜欢:
product.setWeight(5.00);
collectedProducts.put(product, quantity);
repository.save(order);
知道我该怎么做吗?我通过创建另一个Map <Product,Weight> 并将其映射为ElementCollection 来实现这一点,但这给了我数据库中的另一个表,我想知道是否有一个简单的方法。
【问题讨论】:
-
如果要添加“额外的列”,请创建一个额外的实体,并映射真实数据(重量+数字)。 JPA 在这里没有做任何特别的事情......让你的 O-O 正确,一切都会很好。
标签: java hibernate jpa spring-data