Hibernate:将多对多映射到Map

时间:2010-12-01 18:31:14

标签: java hibernate map many-to-many

我正在开发一个处理以下两个实体的应用程序:产品(我们将其命名为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

第三个表中的“count”字段是相同类型材料的系数(示例中为2,6,4)。

所以我想以这种方式撰写Product class:

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

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

1 个答案:

答案 0 :(得分:9)

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

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

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