Hibernate:将多对多映射到Map

我正在开发一个处理以下两个实体的应用程序: 产品 (我们将其命名为X,Y,Z)和材料 (a,b,c,…)。 众所周知,每种产品都有配方,表明制造该产品需要哪些材料。 例如,为了产生一个X,我们需要2 a,6 c和4 d(X = 2a + 6c + 4d)。

这就是它在数据库表中的反映:

Products id INT name VARCHAR ... Materials id INT name VARCHAR ... Recipes product_id INT material_id INT count INT 

第三表中的“计数”字段是相同类型的材料的系数(来自该示例的2,6,4)。

所以我想用这种方式组合Product类:

 public class Product { ... private Map recipe; // How many units of each material we need? ... } 

它是一种使用Hibernate获取配方Map的所有必要数据的方法吗? 单独的配置方法(没有注释)是首选。

由于没有人发布没有注释的解决方案,我将使用JPA 2.0 @ElementCollection注释显示解决方案:

 @ElementCollection @CollectionTable(name = "Recipes", joinColumns = @JoinColumn(name = "product_id")) @MapKeyJoinColumn(name = "material_id") @Column(name = "count") private Map recipe; 

另请注意,由于地图的值类是Integer ,因此没有注释的解决方案可能会记录为“集合映射”而不是“实体关系映射”。