为什么我需要在 JPA 中双向设置实体

2024-01-11

我有以下两个实体:

@Entity
public class Pilot implements Serializable {
....
    @ManyToOne
    @JoinColumn(name = "FLIGHT_ID")
    private Flight flight;
}

and

@Entity
public class Flight implements Serializable {
....
    @OneToMany(mappedBy = "flight")
    private List<Pilot> pilots;
}

我正在使用 EJB 将飞行员添加到航班中:

public void addPilotToFlight(String pilotId, String flightId) {
    <code to find Flight f>
    <code to find Pilot p>
    p.setFlight(f);
    f.getPilots().add(p); // Why do I need this one?
}

我的困惑是为什么我需要双向链接对象?

我已经尝试过有和没有的代码f.getPilots().add(p);部分,在 DB 中看起来完全相同。但是,当我尝试使用f.getPilots();对于同一个航班实体对象,它仅在我完成上述双向链接后才显示。有人可以解释一下吗?我将非常感激。提前致谢。


您的问题似乎旨在询问为什么必须维持双向关系的双方,这是一个常见的问题和混乱的根源。

CMP 2.0 试图在幕后执行关系维护和魔法,但开销和缺乏控制是一个问题(IMO),并且它没有包含在JPA。相反,JPA 实体是普通的旧 java 对象。这意味着,如果您希望对关系的一侧所做的更改反映在另一侧,您必须自己做出改变。

令人困惑的是,如果您修改关系的一侧而不是另一侧,有时数据库会正确更新,有时不会,有时双方都会显示更改。这完全取决于您更改哪一侧,以及如何从数据库缓存和刷新实体。对拥有方的更改会持久保存到数据库中,并且 JPA 允许缓存,因此非拥有方可能无法反映这些更改,直到从数据库刷新为止。

最佳实践是,如果您希望对象模型与数据库保持同步,则应用程序应该对一侧所做的任何更改也对另一侧进行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我需要在 JPA 中双向设置实体 的相关文章

随机推荐

  • Promise.resolve() 什么时候触发 then() 方法? [复制]

    这个问题在这里已经有答案了 我正在学习js中的Promise 我对此有一些疑问 这是代码 Promise resolve then gt console log 0 return Promise resolve 4 then res gt
  • 如何使用 openssl 验证电子邮件中的 DKIM 签名?

    我已经为我的 postfix 设置了 opendkim 现在所有外发邮件都有 DKIM Signature 标题 我想要做的是手动验证 无需 DNS 和外部实用程序 最好仅使用 openssl 消息是否获得正确的签名 所以作为输入数据我有
  • 嵌套 FOR 循环和 IF 条件的问题

    我有几行文字 然后我有一个包含测试词的列表 我喜欢查找文本的每一行并检查其中是否出现一个测试词 在此之前 这与如下命令配合使用效果很好 IF not stringToTest searchstring stringToTest 但是 现在这
  • 删除MySQL查询中的重复结果

    MySQL 查询检索 totalpoints name 55 John Doe 55 John Doe 55 John Doe 55 John Doe 55 John Doe 21 Jean London 21 Jean London 13
  • RTTI 可以在设计时询问项目代码中的类型吗?

    我想使用 RTTI 在设计时而不是运行时检查项目源文件中包含的类型 据我所知 这是不受支持的 但评论中的讨论这个问题 https stackoverflow com questions 9046778 class reference as
  • 替换 hg 分支的内容

    我有一个 hg 仓库 我曾经有一个名为 1 x 的短暂分支 它在某个时间点终止了 默认 它被关闭是因为我觉得在那个特定时刻不需要使用该分支 然而 我被迫放弃 默认 的开发方式 并在创建 1 x 之前的更早版本中创建另一个分支 我无法使用 1
  • 当我尝试使用或返回枚举值时,可以避免强制转换它吗?

    如果我有以下枚举 public enum ReturnValue Success 0 FailReason1 1 FailReason2 2 Etc 我可以在返回时避免强制转换吗 如下所示 public static int main st
  • Keycloak 中的资源、范围、权限和策略

    我想使用 Keycloak 的授权系统创建一个相当简单的基于角色的访问控制系统 Keycloak 正在取代的系统允许我们创建一个 用户 他是一个或多个 组 的成员 在这个遗留系统中 通过组成员身份 其中为组分配了权限 或直接向用户授予权限
  • HTMLagilityPack 与 Powershell、Windows 身份验证相结合

    所以我有一个叫做lansweeper的工具 它在本地服务器上运行 现在我想从中抓取一个页面 但它使用 Windows 身份验证 我使用 Powershell 作为脚本语言 我主要使用HTMLAgilityPack来抓取 但我从来没有抓取过使
  • if 中的单个等于。 JavaScript。有什么好的理由吗?

    jQuery each player function key val if el pr attr plain key el text val 0 val 我继承了一个项目 但我遇到了一些奇怪的事情 启动这个项目的人是一位经验丰富的程序员
  • 打开 facebook 页面进入 facebook 应用程序 Ios + ionic

    目标 在 facebook 应用程序中打开 facebook 页面 url 我正在使用离子version 1 6我努力了 a img src img fb png alt width auto height auto a 在控制器文件中 我
  • 使用 python 抓取 javascript:void(0) 内容

    我正在制作一个程序 其中我正在废弃一个网页 并且内容从原始页面隐藏并用于显示自身herf javascript void 0 链接和文本位于 p 进而 span tags 这是我的代码 import requests re from bs4
  • 类中的 JavaScript“onclick”上下文

    今天我想知道在一个项目中保留上下文的最佳方法onClick在类中使用时的侦听器 如果this在某个地方得到了回答 请将我链接到它 我显然太愚蠢了 找不到它 无论如何 我的问题是 是否有最佳实践 或者我的一些想法是否愚蠢甚至错误 我尝试了一些
  • 如何进行 Django REST 框架 /me/ 调用?

    假设我有一个ViewSet class ProfileViewSet viewsets ModelViewSet API endpoint that allows a user s profile to be viewed or edite
  • imap 自定义关键字

    我从哪开始呢 我似乎找不到任何明确的文档 我可能找错地方了 我希望能够编辑电子邮件的 IMAP 关键字 用于标记目的 我有一些非常菜鸟的问题 它们是如何添加的 关键字是否直接应用于消息标头 如果是 语法是什么 或者是否有其他类型的 imap
  • 错误:java.lang.SecurityException:签名者信息与同一包中其他类的签名者信息不匹配

    我正在使用下面的 jar 文件 bcmail jdk16 1 46 bcprov jdk16 1 46 commons codec 1 9 commons io 2 5 我在这一行遇到错误 CMSSignedData cms new CMS
  • python中通过爬取子URL来下载文件

    我正在尝试从大量网络链接下载文档 主要是pdf格式 如下所示 https projects worldbank org en projects operations document detail P167897 type projects
  • 当未设置属性时,构建失败的简单方法是什么?

    正如标题中所述 我如何以最简单的方式修改apom xml为了使其在命令行中未设置属性时失败 例如 mvn clean package将会失败 当mvn clean package Dfoo bar将会成功 我正在寻找类似的东西
  • 每秒基板事务性能

    大家好 我有一个与性能相关的问题 我正在运行 2 个具有 30GB 存储空间的 aws 实例 t2 2xlarge 我正在使用默认设置在每个节点上运行 v2 0 节点 几天前从 master 分支 并且我正在测试每秒可以处理多少事务 平均每
  • 为什么我需要在 JPA 中双向设置实体

    我有以下两个实体 Entity public class Pilot implements Serializable ManyToOne JoinColumn name FLIGHT ID private Flight flight and