当前位置: 首页 > 面试题库 >

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

尹承业
2023-03-14
问题内容

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

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

有人可以解释吗?


问题答案:

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

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

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

@OneToMany(问题- >类别)

仅当您使用@JoinTable或使用显式定义时,连接关系才能由连接表表示。当它是 单向
关系时,其中拥有方为“一个”方(这意味着在Question实体中您具有的集合Categories,但在Categories您中没有对的引用Question

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

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

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

@多多多

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



 类似资料:
  • 问题内容: 由于使用a 和批注之间都存在一对多关系,因此两者之间有什么区别? 问题答案: 我相信主要用于映射非实体(可嵌入或基本),而用于映射实体。因此,使用哪种取决于您要实现的目标。

  • 问题内容: 设置JVM参数之间有区别吗 在JVM启动并设置Linux环境变量时 JVM启动之前? 两种方法的优点/缺点是什么? 问题答案: 第一种形式 将在java字节码级别处理,先调用,然后再调用。在函数call中,将检查system属性以获取库的完整路径,并将此完整路径传递给本机代码以调用system api ,最终使库被加载。您可以从OpenJDK存储库浏览源。以下代码段是我从链接中复制的段

  • 问题内容: 我错放了太多次了,我想我一直忘记,因为我不知道两者之间的区别,只是一个给了我我期望的价值,而另一个却没有。 为什么是这样? 问题答案: 是的简写形式(尽管请注意,该表达式只会被计算一次。) 是的,即指定一元的到。 例子:

  • 问题内容: 因此,我有一段简单的代码可以打印出整数1-10: 然后,如果仅在第3行上更改一个运算符,它将打印出无限数量的1整数(我知道为什么会这样做)。为什么在运行第二个程序时没有出现语法错误?如果赋值运算符后面跟着一个加法运算符,它不会调用语法错误吗? 问题答案: 与相同, 只是意味着。