好吧,区别在于您尝试使用对象反映的设计。
在你的情况下,每个都可以分配给多个 - 所以这是关系的标志。现在,您必须确定是否:Question
Categories
@*ToMany
- 每个只能分配一个(这将导致一个唯一的约束,这意味着没有其他类别可以引用相同的问题) - 这将是关系,
Category
Question
@OneToMany
- 每个都可以分配多个(表中不会有唯一的约束) - 这将是关系。
Category
Questions
Category
@ManyToMany
@OneToMany(问题->类别)
只有当您显式定义 so using 或 当它是单向关系(其中拥有方是“一”侧)时,才能由连接表表示(这意味着在实体中您有一个集合,但在 您没有任何对 的引用)。@JoinTable
Question
Categories
Categories
Question
如果您仔细想想,使用联接表似乎非常合理。DBMS 没有其他方法可以保存表中的一行与表中的多行之间的连接。Question
Categories
但是,如果要对双向关系进行建模,则需要指定(“多”方)是关系的拥有方。在这种情况下,DBMS 可以在表中创建具有外键的联接列,因为每行只能连接一个 。Category
Category
Category
Question
通过这种方式,您没有任何连接表,而是简单的外键(仍然,如开头所指出的,您可以使用 强制创建连接表)。@JoinTable
@ManyToMany
此关系必须表示为联接表。它基本上与单向关系非常相似,但在这种情况下,您可能有多个行与 中的多个行联接。@OneToMany
Question
Categories