我有一个市场形式的项目,我用 Java 编写,使用 Hibernate 和 Spring。
我有卖家、买家、产品、订单(order
)、购物车的实体。买家、卖家和订单都有形式为 的字段HashMap
。它将产品(ID)存储为键,将产品数量存储为值。我怎样才能最好地将它们存储在数据库中?
Neuronka 提供了一个选项将它们存储为 JSONB 对象,即将 JSON 嵌套在另一个 JSON 中。但据我了解,Hibernate 无法自行将地图解析为 JSON。我不太想自己编写解析器,所以问题出现了:还有什么其他方法可以有效地将地图存储在数据库中?
使用JSONB进行存储并不是最好的选择。因为它不允许使用 Hibernate 选择相同的产品。另一方面,您可以使用 Hibernate 将产品集合映射到使用它们的表。要做到这一点你需要
用法
@MapKeyColumn
假设我们有一个实体
Order
,我们想要跟踪订单中所有商品的名称和数量。因此,我们要输入Map<Long, Integer>
,Order
它将匹配product_id
产品及其数量:您需要告诉 Hibernate 在哪里获取键和值。对于我们使用的键
@MapKeyColumn
,表明该键是我们的连接表的Map
一列。类似地,表示该值对应于连接表的某一列。product_id
order_product_mapping
@Column
Map
qty
此外,该对象
productQtyMap
是一个键值映射,所以我们必须使用注释@ElementCollection
。除了基本的键值对象之外,对象还可以按照类似的方式
@Embeddable
用作值。Map
Hibernet 可以与 Maps 和 jsonb 一起工作。代码示例 -
数据库表中的值为 -