JPA 中的附加查询

2023-12-02

我有两节课InvitedPerson and Flight彼此之间具有一对一的关系。以下是它们的注释方式。

public class InvitedTech{
    ...
    @OneToOne(mappedBy="invitedTech", cascade = CascadeType.ALL, fetch=FetchType.LAZY)
    public Flight flight;

    @OneToOne(mappedBy="invitedTech", cascade = CascadeType.ALL, fetch=FetchType.LAZY)
    public Hotel hotel;

    ...
}

public class Flight{
    ...
    @OneToOne
    @JoinColumn(name="invitedTechId", nullable=false)
    public InvitedTech invitedTech;
    ...
}

如你看到的Flight是该关系的所有者,并且InvitedTech是这种双向关系的另一面。 InvitedTech 还拥有一个OneToOne有关系Hotel现在,当我编写一个简单的查询来获取所有航班时,它总共触发了三个查询。第一个得到了结果,但引发了 2 个额外的查询。

List<Flight> flg = JPA.em().createQuery("SELECT flg from Flight flg").getResultList();
  1. 获取所有航班的查询(这是我唯一需要的)
  2. 通过 InvitedTech 和 Flight 之间的联接进行查询
  3. 通过 InvitedTech 和 Hotel 之间的联接进行查询

即使我设置了 FetchType=Lazy,为什么仍执行查询 2&3。我没有访问酒店信息。并且 Flight 不应再次查询,因为第一个查询返回数据。

经过一番尝试后,当我删除时mappedBy来自两个注释的属性,这两个附加查询不会被执行(即只有第一个被执行)。

为什么mappedBy属性会导致执行额外的查询,即使FetchType=Lazy。有办法阻止这种情况吗?


我相信这是由于 Hibernate 的特性之一造成的:

无论非可选的一对一关系是否映射为惰性关系,都会立即加载。

这背后的原因是,由于引擎无论如何都必须查看关联表 - 以确定是否应该将关联设置为代理或空 - 那么它也可能会加载关联的实体。

我自己也经历过这种情况,据我所知,唯一的解决方法是用 option=false 标记关系,这告诉 Hibernate 它始终可以设置代理。

如果关系是可选的,那么唯一的其他选项似乎是字节码检测。

也可以看看:

https://community.jboss.org/wiki/SomeExplanationsOnLazyLoadingone-to-one

使 OneToOne 关系变得懒惰

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

JPA 中的附加查询 的相关文章

  • 如何将抽象工厂与单例模式结合起来? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在用 java 编码 并且对这些模式很陌生 谁能给我一个也使用单例的工厂抽象的例子 这是一个实现类的示例单例模式 这个实现也是线程安全
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 获取 SQL 表上未使用的唯一值

    我有一个表 其中有一列描述数字 ID 该 ID 对于所有行都是唯一的 但它不是主键 数字 ID 是有限的 假设答案可以是从 1 到 10 SELECT ID FROM TABLE ID 1 2 5 我必须 通过 UI 向用户呈现未使用的值
  • 对时间序列数据重新采样

    我有一个以毫秒为单位的时间序列列表 我想对时间序列进行重新采样并对组应用平均值 我如何在 Postgres 中实现它 重新采样 是指聚合一秒或一分钟内的所有时间戳 一秒或一分钟内的所有行形成一组 表结构 date x y z Use dat
  • 简单的t-sql而不是触发器

    任何人都可以帮助解决简单的 t sql 脚本与板载触发器的问题吗 我使用非常简单的触发器将数据从一个表复制到另一个表 这些表之间没有关系 当我尝试在触发器创建后 从同一脚本 直接第一次插入数据时 我得到了所需的结果 但所有接下来的尝试都会失
  • 计算行数并仅获取表中的最后一行

    我有一张桌子叫employeexam其结构和数据是这样的 id course id employee id degree date 1 1 3 8 2013 01 14 2 2 4 15 2013 01 14 3 2 4 17 2013 0
  • 根据 SQL 查询的集合生成成员的“散点图”结果

    我有一个staff包含工作人员的数据库表 其中user no and user name列 我还有一个 department 包含员工可以加入的部门的表 其中dept no and dept name作为列 因为员工可以是多个部门的成员 所
  • JFrame Glasspane 也优于 JDialog,但不应该

    我有一个带有 Glasspane 的 JFrame 未装饰 该框架打开一个 JDialog 也未装饰 也有一个 glassPane 并隐藏自身 setVisible false Glasspanes 通过 setGlassPane 设置 对
  • Java 不可变对象 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在学习不变性的概念 据我了解 一旦创建对象 不可变对象就无法更改其值 但我不明白不可变对象的以下用途 They are 自动是线程
  • Java字符串查找和替换的最佳方法?

    我正在寻找 Java 中字符串查找和替换的最佳方法 这是一句话 我的名字叫米兰 人们都知道我叫米兰瓦西奇 我想用 Milan Vasic 替换 Milan 弦 但在我已经有 Milan Vasic 的地方 情况不应该是这样 搜索 替换后的结
  • Elasticsearch - EdgeNgram + 突出显示 + term_vector = 不好的突出显示

    当我使用带有edgengram min 3 max 7 front term vector with positions offsets的分析器时 文档包含文本 CouchDB 当我搜索 couc 时 我的亮点是 cpu 而不是 couc
  • Java 中更高级的泛型

    假设我有以下课程 public class FixExpr Expr
  • SimpleDateFormat 无法解析的日期 如果语言环境为 ES,则会出现错误。推特“创建时间”

    我正在尝试将 Twitter created at 转换为阿根廷日期时间 如果我这样做 final String TWITTER EEE MMM dd HH mm ss SimpleDateFormat sf new SimpleDateF
  • ASTParser:解析绑定后查找声明节点

    我创建了一个启用了绑定的 AST 当我稍后解析绑定时 我得到了一个有效的 ITypeBinding 但是 当我想要获取绑定的声明 Node 时 它 总是返回 null 除非 ITypeBinding 在 sourceFile 中声明 这是我
  • Spring Transactional 减慢了整个过程

    我正在尝试分析我有两堂课的情况 其中一个类是 ProcessImpl 它是起点并在内部调用其他子事务 我不知道出了什么问题 processImpl正在导入一些东西并将相关数据写入数据库 Specs Spring orm版本 3 2 18 发
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • AndroidAnnotations 和 Dagger

    我正在尝试使用 Dagger 注入 Android 带注释的 Activity java lang IllegalArgumentException No inject registered for members com app serv
  • 如何创建具有同等时间元素的 JavaFX 转换?

    我正在尝试 JavaFX 和动画 尤其是PathTransition 我正在创建一个简单的程序 使球 弹跳 而不使用QuadCurveTo班级 到目前为止 这是我的代码 Ellipse ball new Ellipse 375 250 10
  • Retrofit 2.0:预期为 BEGIN_OBJECT,但在第 1 行第 1 列路径 $ [重复] 处为 STRING

    这个问题在这里已经有答案了 我在邮递员上传递了更新用户请求并获得了成功的响应 参见图片 现在当我尝试使用 Retrofit 2 在我的应用程序中执行相同操作时 出现错误 com google gson JsonSyntaxException
  • 在没有EOF的情况下停止读取java中的输入

    In 问题 如何停止读取输入 我的程序继续运行 要求更多输入 public static void main String args throws Exception BufferedReader br new BufferedReader

随机推荐

  • 使用ant删除重复文件?

    有没有办法使用ant删除重复文件 具体来说 如果我在两个不同的输出目录中有相同的文件名 我想从第二个目录中删除它 我想我想出了一个解决方案
  • dplyr r:选择名称位于外部向量中的列[重复]

    这个问题在这里已经有答案了 Purpose 我可以使用选择列dplyr条件是列名位于外部向量中 我发现一些帖子解释了如何使用名称向量对数据框进行子集化 但当向量中的某些名称在数据框中不存在时 我找不到帖子 示例数据集 library tid
  • 如何停止张量流中张量某些条目的梯度

    我正在尝试实现一个嵌入层 将使用预先训练的手套嵌入来初始化嵌入 对于可以在手套中找到的单词 它将被修复 对于那些没有出现在手套中的单词 它会被随机初始化 并且是可训练的 我如何在张量流中做到这一点 我知道整个张量有一个 tf stop gr
  • 带有表达式不需要的结果的 C 宏

    我正在运行以下程序并得到结果为 9 7 我理解为什么输出是 9 但我不明白为什么我得到 7 作为输出 include
  • 从登录参数创建用户对象

    我试图在用户登录后创建一个包含所有用户字段的用户对象 以便我可以从用户的类中检索任何给定的属性 这是用户类 public class User private String username private String password
  • 运行时错误“9”下标超出条件格式代码范围

    我对 VBA 以及一般的任何类型的编程 非常陌生 所以我不确定如何继续 我猜我的错误与条件格式的重叠范围有关 因为当代码以不同的方式设置时 我也会遇到错误 一旦范围不再重叠 这些错误就会得到解决 这里的情况可能并非如此 但我认为了解一下会有
  • 自签名证书可以保护多个 CN / FQDN 吗?

    这是一个有点愚蠢的设置 但这就是我现在正在查看的内容 我正在学习 Kubernetes 我想将自定义代码推送到我的 Kubernetes 集群 这意味着该代码必须作为 Docker 映像提供 可从someDocker 存储库 默认为 Doc
  • 重复调用 Ng-Options 表达式

    我的设备有多个问题
  • 配置 Eclipse 以与 MSYS2 一起使用

    我使用 Eclipse Mars 和 MSYS2 Eclipse 无法识别我的 MSYS2 安装 它包含用于 32 位编译的 Mingw w64 我在互联网上找到的东西不起作用 我应该怎么办 好吧 聚会有点晚了 但看起来还有没什么特别的关于
  • ASP.NET-发送电子邮件

    我正在做一个航班预订系统 我想向用户发送一封电子邮件 其中包含他的旅行的电子机票 电子机票是使用从数据库中获取的预订 ID 以及前面页面中的其他详细信息 例如乘客姓名等 动态生成的 那么我怎样才能将动态生成的电子客票发送到他的电子邮件 ID
  • 与视频同步播放多个音轨之一

    我正在尝试在网络浏览器中播放视频 原始视频带有两个或多个音频流 每个音频流都采用不同的语言 我想让用户可以选择切换他们正在收听的音轨 我尝试使用audioTracks在视频元素上 但尽管说它在大多数浏览器中都支持在标志后面 至少在 Fire
  • req.body 是未定义的意思是应用程序

    我的应用程序有问题 告诉您问题所在的简单方法让我向您展示我的代码 var Meetup require models meetup module exports create function req res var meetup new
  • Mongodb和排序子数组

    不确定这是否可以做到 所以我想问一下 我有以下 mongodb s store abc offers spend 100 00 cashback 10 00 percentage 0 10 spend 50 00 cashback 5 00
  • 在运行时将环境变量传递到 Vue 应用程序

    如何访问 Vue 中的环境变量 这些变量在运行时而不是在构建期间传递给容器 堆栈如下 Vue CLI 3 0 5 Docker 库伯内斯 stackoverflow 和其他地方建议使用 env 文件传递 变量 和使用模式 的解决方案 但这是
  • 自定义域名映射到用户配置文件。

    目前 用户配置文件的格式为 website com username 这很好 然而 一些重度用户希望使用自定义域名 这与 Tumblr 类似 用户被授予 username tumblr com 的子域 但允许他们使用映射到该子域的外部域 我
  • MS Access SQL:聚合最小值但检索其他字段

    这可能是一个非常简单的问题 但我不知道如何在 MS Access 中解决它 以前可能已经回答过 但我没能找到 我有一个包含 3 列的表 col1 是对象 ID col2 和 col3 是测量值 我构建了一个查询 以便对于每个对象 我们都能在
  • 为什么我无法在 lambda 中捕获此按引用 ('&this')?

    我明白了正确的捕捉方式this 修改对象属性 在 lambda 中如下 auto f this 但我对我所看到的以下特点感到好奇 class C public void foo auto f this not captured auto f
  • Postgresql sqlalchemy 默认时间 now() 一遍又一遍地给出相同的时间

    我的表内有一个字段 即时间 time db Column db Time default datetime datetime now time nullable False 由于某种原因 它一直默认为同一时间而不是实际的系统时间 23 53
  • ExtJS 4 中的股票图表

    如何绘制数百点的股票图表或折线图 我在常规折线图中禁用了动画 但没有成功 而且仍然太重且太慢 我最近写了一篇关于在 Ext JS 4 中创建股票图表的博客文章 http www scottlogic co uk 2011 12 ext js
  • JPA 中的附加查询

    我有两节课InvitedPerson and Flight彼此之间具有一对一的关系 以下是它们的注释方式 public class InvitedTech OneToOne mappedBy invitedTech cascade Casc