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

JPA:在am:n关系中哪一方应该是拥有一方?

万高轩
2023-03-14
问题内容

举例来说,我有两个实体:ArticleTag(就像在典型的博客中一样)。每个文章可以有许多标签,并且每个html" target="_blank">标签可以被许多文章使用,因此这是一种经典的m:n关系。

我需要指定JPA的拥有方。但是哪一方应该是拥有方?文章不依赖特定标签,反之亦然。是否有经验法则来确定哪一方应该是拥有方?


问题答案:

每个双向关系都需要在JPA中拥有一面。在特定情况下ManyToMany

  • @JoinTable 在关系的拥有方指定。
    • 拥有方是 任意的 ,您可以选择两个实体中的任何一个作为所有者。

根据JPA规范:

9.1.26 ManyToMany批注

每个多对多关联都具有两个方面,即拥有方和非拥有方或逆向方。连接表是在拥有方上指定的。如果关联是双向的,则任何一方都可以指定为拥有方。



 类似资料:
  • 我在实体“任务”和实体“用户”之间有双向关联。 “任务”定义如下 “用户”的定义是 从两个方向访问关系很好。问题是,一旦定义了“Task”实体,我就无法更新它。 这是一个测试案例 我做错了什么?

  • 在一对多关系中,通常使用@ManyToOne注释的字段是所有者-另一方具有“mappedBy”属性。但是,如果我跳过“mappedBy”并用@JoinColumn(同一列)注释两侧,我可以更新两侧-更改将传播到db。 我没有两个单向关系而不是一个双向关系-只有一个连接列。 没有选择一方作为关系所有者会遇到什么问题? 我的实体看起来类似于以下内容: 它似乎对性能没有任何影响(至少看起来不错),下面是

  • 问题内容: 我有一对一的关系,但是hibernatetool在生成模式时抱怨。这是显示问题的示例: 人与OtherInfo具有一对一关系: 人是OtherInfo的拥有方。OtherInfo是拥有方,因此person用于在Person中指定属性名称“ otherInfo”。 使用hibernatetool生成数据库架构时出现以下错误: 知道为什么吗?我是在做错什么还是这是Hibernate错误?

  • 我有一个实体: 要创建上述实体并将其保存到JPA存储库中,我将执行以下操作: 由于DB中的表存储了候选对象的FK,我认为设置一个id就足够了。但JPA希望我设置候选对象。这迫使我查询候选存储库。 是否需要从候选库中查询候选人以保存,或者如果我有可用的候选人id,我不能直接设置它?

  • 问题内容: 您是否应该在JPA中每个表有一个存储库?如果不是,您如何解决存储库数据库中的泛型? 例如,下面是一个。它处理对对象的 CRUD 操作。如果我想让存储库也保存一个对象,我将如何更改下面的界面以容纳两个对象? 问题答案: 由于存储库是从域驱动设计派生的概念,因此考虑数据库表是错误的方法。根据定义,您可以从存储库访问聚合根。实际上,存储库正在模拟这些集合。 现在是什么形成聚合根?可能更有趣:

  • 问题内容: 我使用JPA,并将Hibernate作为其实现。我的项目中 需要* 具备哪些依赖关系? * 问题答案: 我相信您仅需要两件事就是hibernate的entitymanager,然后是SLF4J日志记录捆绑包之一。其他所有内容都应作为依赖项引入: