将Hibernate映射到自引用的多对多映射

时间:2019-03-18 18:43:44

标签: java hibernate jpa orm

在我的数据库中,我有一个Food,它与其他成分Foods之间存在多对多关系。这种关系就是这样……

+=============Foods============+    +==========Ingredients===========+
| Id | Name      | Description |    | FoodId | IngredientId | Amount |
+==============================+    +================================+
| 1  | Ice Cream | ........... |    | 1      | 2            | 300    |
+------------------------------+    +--------------------------------+
| 2  | Milk      | ........... |
+------------------------------+

但是,在域模型中,最逻辑的数据结构将是Foods和数量的映射。最终,当我加载“冰淇淋”时,我需要包含所有成分Foods(可通过成分表找到)以及相应值的映射,但是我很难弄清楚该怎么做。

@Entity
@Table(name="Foods")
public class Food {
  @Id 
  @GeneratedValue(strategy = GenerationType.IDENTITY) 
  @Column(name="Id")
  private int id;

  @Column(name="Name")
  private String name;

  @Column(name="Description")
  private String description;

  @ManyToMany ???
  private Map<Food, Integer> ingredients;

1 个答案:

答案 0 :(得分:1)

我首先要创建一个新实体Ingredient,该实体具有由两个外键以及amount整数组成的复合键。您可以将Food直接用作两个外键的字段类型。

然后在您的Food实体中,可以添加一个@OneToMany Set<Ingredient>,将id映射到Ingredient的{​​{1}}。然后,您将可以轻松获得一个foodId的所有Ingredient条目。