使用@OneToMany和@ManyToMany之间的区别

我有一些无法理解的区别@OneToMany@ManyToMany。当我使用@OneToMany它时,默认情况下会创建一个JoinTable,并且如果您添加mapledBy属性,则两个实体之间将具有双向关系。

我有一个Question可能属于许多人Categories,一个Category可能属于许多人Questions。我不知道是否应该使用,@ManyToMany或者@OneToMany因为对我来说这似乎是完全相同的事情,但可能并非如此。

有人可以解释吗?

回答:

好吧,不同之处在于您尝试使用对象反映的设计。

在您的情况下,每个Question都可以分配给多个Categories-这是@*ToMany关系的标志。现在,您必须决定是否:

  • 每个Category都只能Question分配一个(这将导致 约束,这意味着 )-这将是@OneToMany关系,
  • 每个Category可以Questions分配多个(Category表中没有唯一约束)-这就是@ManyToMany关系。

仅当您使用@JoinTable或使用显式定义时,连接关系才能由连接表表示。当它是

关系时,其中拥有方为“一个”方(这意味着在Question实体中您具有的集合Categories,但在Categories您中没有对的引用Question

如果您考虑一下,使用联接表似乎很合理。DBMS没有其他方法可以保存Question表中的一行与表中的多行之间的连接Categories

但是,如果要建模双向关系,则需要指定Category(“很多”面)是该关系的拥有面。在这种情况下,DBMS可以在Category表中创建带有外键的连接列,因为每一Category行只能连接一个Question

这样,您就没有任何联接表,只有简单的外键(仍然,如开头所述,您可以使用强制创建联接表@JoinTable)。

此关系必须表示为联接表。它的工作原理与单向@OneToMany关系非常相似,但是在这种情况下,您可能会有来自的Question多行与来自的多行Categories

以上是 使用@OneToMany和@ManyToMany之间的区别 的全部内容, 来源链接: utcz.com/qa/415763.html

回到顶部