假设我有一个名为收集的课程,其中包含以下属性:
@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 |
+----------------+------------+------------+
如果我想要另一个名为'weight'的列,如果:
,该怎么办?+----------------+------------+------------+------------+
| 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
来实现此目的,但这给了我数据库中的另一个表,我想知道是否有一种简单的方法。
答案 0 :(得分:0)
创建了另一个名为Quantity
的类,并将其标记为@Embeddable
@Embeddable
public class Quantity {
private int quantity;
private double weight;
//getters and setter ommited;
}
然后在我的Collect
类中,只将这个新类映射为我的地图值类型:
@ElementCollection
@MapKeyJoinColumn(name="product_id")
@CollectionTable(joinColumns=@JoinColumn(name="order_id"))
Map<Product,Quantity> collectedProducts;