在我的数据库中,我有一个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;
答案 0 :(得分:1)
我首先要创建一个新实体Ingredient
,该实体具有由两个外键以及amount
整数组成的复合键。您可以将Food
直接用作两个外键的字段类型。
然后在您的Food
实体中,可以添加一个@OneToMany
Set<Ingredient>
,将id
映射到Ingredient
的{{1}}。然后,您将可以轻松获得一个foodId
的所有Ingredient
条目。