2014-10-06 79 views
0

我需要创建一个M到N映射额外列,与anotations休眠,此表:M到N的映射与使用anotation

Table Food : Columns: id, description, size, type 
Table Ingredients: Columns: id, description, price 
Table Food_Ingredients: Columns: food_id (FK), ingredient_id (FK), quantity 

类:

class Food { 

    /*mapped fields setter/getters*/ 

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.DETACH) 
    @JoinTable(name = "food_ingredient", 
       joinColumns = { @JoinColumn(name = "food_id", nullable = false) }, 
       inverseJoinColumns = { @JoinColumn(name = "ingredient_id", nullable = false) }) 
    private List<Ingredient> ingredients; 

} 

class Ingredients {/*mapped fields setter/getters*/} 

那么,如何我可以映射这些实体吗?

回答

2

你打算如何表示模型中的数量?您应该使用此属性为FoodIngredients创建一个新实体(并链接到其他两个表),并使用@OneToMany注解在食品和配料中对其进行映射。

编辑:您可以使用http://www.mkyong.com/hibernate/hibernate-many-to-many-example-join-table-extra-column-annotation/作为参考

+0

这是最好的方式? – AndreDuarte 2014-10-06 14:28:16

+0

这是我知道的唯一方法。 Food_Ingredients不是联结表,因为它包含一些额外的外键数据。您需要以某种方式传达有关数量的信息,因此您需要一个新的实体来完成此操作。 – 2014-10-06 14:42:20

+0

它工作。我将尝试增强解决方案以获得简单的类,但是您的解决方案运行良好。非常感谢。 – AndreDuarte 2014-10-06 19:06:21