JPA继承@EntityGraph包括子类的可选关联

2024-01-04

给定以下域模型,我想加载所有Answer包括他们的Values 及其各自的子孩子并将其放入AnswerDTO然后转换为 JSON。我有一个可行的解决方案,但它遇到了 N+1 问题,我想通过使用临时解决方案来摆脱它@EntityGraph。所有关联均已配置LAZY.

@Query("SELECT a FROM Answer a")
@EntityGraph(attributePaths = {"value"})
public List<Answer> findAll();

使用临时@EntityGraph on the Repository方法我可以确保预取值以防止 N+1Answer->Value协会。虽然我的结果很好,但还有另一个 N+1 问题,因为延迟加载selected的协会MCValues.

使用这个

@EntityGraph(attributePaths = {"value.selected"})

失败,因为selected领域当然只是某些领域的一部分Value实体:

Unable to locate Attribute  with the the given name [selected] on this ManagedType [x.model.Value];

我怎样才能告诉 JPA 只尝试获取selected关联,如果该值为 aMCValue?我需要类似的东西optionalAttributePaths.


您只能使用一个EntityGraph https://thoughts-on-java.org/jpa-21-entity-graph-part-1-named-entity/如果关联属性是超类的一部分并且也是所有子类的一部分。否则,EntityGraph总是会失败Exception您目前得到的。

避免 N+1 选择问题的最佳方法是将查询拆分为 2 个查询:

第一个查询获取MCValue实体使用EntityGraph获取映射的关联selected属性。在该查询之后,这些实体将被存储在 Hibernate 的一级缓存/持久化上下文中。 Hibernate 将在处理第二个查询的结果时使用它们。

@Query("SELECT m FROM MCValue m") // add WHERE clause as needed ...
@EntityGraph(attributePaths = {"selected"})
public List<MCValue> findAll();

然后第二个查询获取Answer实体并使用EntityGraph还可以获取关联的Value实体。对于每个Value实体,Hibernate 将实例化特定的子类并检查一级缓存是否已包含该类和主键组合的对象。如果是这种情况,Hibernate 将使用一级缓存中的对象,而不是查询返回的数据。

@Query("SELECT a FROM Answer a")
@EntityGraph(attributePaths = {"value"})
public List<Answer> findAll();

因为我们已经获取了所有MCValue具有关联的实体selected实体,我们现在得到Answer具有初始化的实体value协会。如果关联包含MCValue实体,其selected关联也将被初始化。

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

JPA继承@EntityGraph包括子类的可选关联 的相关文章

  • Rails csv 格式的原始查询,通过控制器返回

    我使用 Active Record 来获取我的故事 然后生成 CSV 这是在 Rails Cast 中完成的标准方法 但我有很多行 需要几分钟 我想如果我能让 posgresql 来做 csv 渲染 那么我可以节省一些时间 这是我现在所拥有
  • JTree 节点不会被直观地选择

    不知何故 我无法为我的 JTree 节点启用 选择突出显示 我正在我的项目中使用自定义单元格渲染器 这很可能导致此问题 这是完整的渲染器类代码 protected class ProfessionTreeCellRenderer exten
  • 有没有好的方法来解析用户代理字符串?

    我有一个Java接收模块User Agent来自最终用户浏览器的字符串的行为需要略有不同 具体取决于浏览器类型 浏览器版本甚至操作系统 例如 FireFox 7 0 Win7 Safari 3 2 iOS9 我明白了User Agent由于
  • 如何解决 onEditCommit 事件上的类型不匹配错误?

    我在 Fxml 中使用 onEditCommit 事件在用户编辑数据后检索数据 FXML 代码
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • PropertySources 中各种源的优先级

    Spring引入了新的注释 PropertySources对于所有标记为的类 Configuration since 4 0 需要不同的 PropertySource作为论证 PropertySources PropertySource c
  • 如何将 Spotlight for Help 插入本地化的 macOS 应用程序?

    我正在 macOS 上使用 Swing GUI 框架实现 Java 应用程序 当使用system外观和感觉以及screen菜单栏 Swing 自动插入一个搜索栏 called 聚光灯寻求帮助 https developer apple co
  • 使用 Java 在浏览器中下载 CSV 文件

    我正在尝试在 Web 应用程序上添加一个按钮 单击该按钮会下载一个 CSV 文件 该文件很小 大小仅约 4KB 我已经制作了按钮并附加了一个侦听器 文件也准备好了 我现在唯一需要做的就是创建单击按钮时下载 csv 文件的实际事件 假设 fi
  • 如何将 XMP XML 块序列化为现有的 JPEG 图像?

    我有许多 JPEG 图像 其中包含损坏的 XMP XML 块 我可以轻松修复这些块 但我不确定如何将 固定 数据写回图像文件 我目前正在使用 JAVA 但我愿意接受任何能让这项任务变得容易的事情 这是目标关于 XMP XML 的另一个问题
  • 如何在java中使jpeg无损?

    有没有人可以告诉我如何使用编写 jpeg 文件losslessjava中的压缩 我使用下面的代码读取字节来编辑字节 WritableRaster raster image getRaster DataBufferByte buffer Da
  • 覆盖 MATLAB 默认静态 javaclasspath 的最佳方法

    MATLAB 配置为在搜索用户可修改的动态路径之前搜索其静态 java 类路径 不幸的是 静态路径包含相当多非常旧的公共库 因此如果您尝试使用新版本 您可能最终会加载错误的实现并出现错误 例如 静态路径包含 google collectio
  • jmap - 组织和堆操作会给 jvm 带来开销吗?

    正如标题所述 需要多少开销jmap histo and jmap heap分别带到jvm 如果一个内存敏感的 Java 进程处于OutOfMemory 例如 大约 96 的堆已满 并且无法通过 full gc 清除 其中一项操作是否有可能将
  • 如何使用 Mockito 和 Junit 模拟 ZonedDateTime

    我需要模拟一个ZonedDateTime ofInstant 方法 我知道SO中有很多建议 但对于我的具体问题 到目前为止我还没有找到任何简单的解决办法 这是我的代码 public ZonedDateTime myMethodToTest
  • 从 Stax XMLStreamReader 读取以解组部分

    我正在使用 Stax 游标 API 从大型 xml 文件中提取数据 当前 我转到特殊标签的开头并使用 JAXB 解组该标签 这对于格式良好的 xml 文件效果很好 但不久前我有一个文档 其中数十万个标签中有一个未关闭 JAXB 使用 XML
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • 来自客户端的超时 Web 服务调用

    我正在使用 RestEasy 客户端调用网络服务 一项要求是 如果调用运行时间超过 5 秒 则中止 超时调用 我如何使用 RestEasy 客户端实现这一目标 我只看到服务器端超时 即如果在一定时间内未完成请求 Rest Easy 网络服务
  • struts 教程或示例

    我正在尝试在 Struts 中制作一个登录页面 这个想法是验证用户是否存在等 然后如果有错误 则返回到登录页面 错误显示为红色 典型的登录或任何表单页面验证 我想知道是否有人知道 Struts 中的错误管理教程 我正在专门寻找有关的教程 或
  • Java 编码风格、局部变量与重复方法调用

    我更喜欢使用局部变量而不是多次调用同一方法 I prefer this Vehicle vehicle person getVehicle if vehicle instanceof Car Car car Car vehicle car
  • MongoDB Java 驱动程序:MongoCore 驱动程序与 MongoDB 驱动程序与 MongoDB 异步驱动程序

    MongoDB Java 驱动程序有三种不同的驱动程序选项 核心驱动 MongoDB 驱动程序 MongoDB 异步驱动程序 The 驱动程序描述页面 https docs mongodb org ecosystem drivers jav
  • 尝试使用带有有效购买令牌的 Java Google Play Developer API v3 检索应用内购买信息时出现错误请求(无效值)

    当使用 Java Google Play Developer API 版本 3 并请求有效购买令牌的购买信息时 我收到以下异常 API 调用返回 400 Bad Request 响应以及以下消息 code 400 errors domain

随机推荐

  • 包主要版本更改是否意味着子包主要版本更改?

    假设我有一个核心 CMS 已从v4 8 7 to v5 0 0 我还有一个事件模块包 有自己的版本号1 2 4它将这个核心 CMS 包导入到它的composer json file company name cms 4 3 我将这个包上的c
  • Tesseract 混淆两个数字

    我正在编写一个应用程序来扫描图像中的数字 这些数字使用 OCR B 字体 并且还可能包含 and gt 人物 这是我的源图像 即使将字符集限制为上述字符 使用 Tesseract 的扫描效果也不是很好 由于我没有找到 Tesseract 的
  • Visual Studio 不会调试到引用的 DLL(来自同一解决方案)

    我有一个 Visual studio 2008 解决方案 有 2 个项目 一个 DLL A 一个 Web 应用程序 B B 有一个对 A 的项目引用 并且 A dll 和 A pdb 正在被复制到 B 的 bin 目录中 一切都设置为在调试
  • 文件夹外的文件夹路径

    我的主文件夹中有一个包含所有 css 的文件夹 名为 main 在 main 中 我有另一个名为 math 的文件夹 我想在 math 文件夹中使用我的CSS 但是当我输入 在 math 文件夹的index html 上它可以工作 我认为这
  • 无法在 Codeigniter 中加载请求的类 Session

    我的图书馆在autoload php is autoload libraries array database pagination session cart form validation 我收到此错误 An Error Was Enco
  • Kotlin 注解 IntDef

    我有这个代码示例 class MeasureTextView TextView constructor context Context super context constructor context Context attrs Attr
  • 如何向框架添加鼠标监听器

    我想向 mt JFrame 框架添加一个 mouselistener 但是当我执行 frame addMouseListener this 时 我收到一个错误 指出我无法在静态方法中使用它 我正在制作一个应用程序 检测鼠标的单击 然后以 i
  • 如何使用 scikit 的预处理/标准化以及交叉验证?

    作为没有任何预处理的交叉验证的示例 我可以这样做 tuned params penalty l2 l1 from sklearn linear model import SGDClassifier SGD SGDClassifier fro
  • 如果选中则获取复选框值

    我正在使用 HTML 和 JQuery mobile 构建一个表单 以便该表单可以在移动设备上使用 我有通过电子邮件导出到 CSV 的表单 但是 如果未选中复选框 则不会写入 CSV 文件 我可以使用 jQuery 中的函数使用标签中的值从
  • MySQL GROUP_CONCAT 多个字段

    我可能正处于无脑时刻 我想使用 GROUP CONCAT 从数据库中的两个字段返回一系列数字 到目前为止我已经使用以下方法完成了此操作 SELECT t id CONCAT GROUP CONCAT DISTINCT s id IFNULL
  • 如何在 C# 中序列化和反序列化以字节数组作为成员的类

    我正在尝试以字节流的形式在两个进程之间发送数据 这对于几乎所有类都工作得很好 但我遇到的一个问题是 如果对象的类内部有一个字节数组并给出 则反序列化会失败我收到一个错误 指出无法加载发生序列化的程序集 我无法将程序集包含在此处 因为发送方和
  • matplotlib:3D 图中的网格

    In matplotlib 如何在 3D 散点图中显示网格 在二维图中我只是这样做 plt grid True 它就像一个魅力 现在 对于 3D 绘图 相同的调用会返回警告 File usr lib pymodules python2 7
  • Haystack - 为什么 RealtimeSearchIndex 有时不更新我保存的对象

    我正在将 Haystack 和 Whoosh 与 Django 一起使用 在 search index py 中我有这个 class PageIndex RealTimeSearchIndex text CharField document
  • 在 Collectionview 中如何根据选择设置颜色?

    我的要求是首先设置默认颜色indexPath我想根据选择改变颜色 我的要求是当集合视图在第一个索引加载时背景颜色应该是红色 未选择的颜色是蓝色 如何管理这个 这是我的代码 import UIKit class MyCollectionVie
  • pandas,将多列的多个函数应用于groupby对象

    我想将多列的多个函数应用于 groupby 对象 这会产生一个新的pandas DataFrame 我知道如何分步骤完成 by user lasts groupby user elapsed days by user apply lambd
  • 如何禁用 mmap() 的写入时复制和按需填充零

    我正在使用 mmap 实现 cp 文件复制 命令 为此 我在 MAP PRIVATE 因为我只想读取 模式下映射源文件 在 MAP SHARED 模式下映射目标文件 因为我必须写回目标文件的更改内容 在执行此操作时 我观察到由于两个原因而发
  • 让 HABTM 关系在 CakePHP 中独一无二

    我有两个模型 称为 Book 和 Tag 它们处于 HABTM 关系中 我希望一对 书籍 标签 仅保存一次 在我的模型中我有 var hasAndBelongsToMany array Tag gt array className gt T
  • 如何在 XPage 中隐藏带有
  • 标记的菜单项
  • 我有一个基于这个惯例的传统菜单 ul li li ul
  • JXMultiSplitPane 在滑块调整期间导致重绘?

    在调整分离器期间 我似乎收到频繁的重涂请求JXMultiSplitPane http download java net javadesktop swinglabs releases weekly week 42 2006 10 15 sw
  • JPA继承@EntityGraph包括子类的可选关联

    给定以下域模型 我想加载所有Answer包括他们的Values 及其各自的子孩子并将其放入AnswerDTO然后转换为 JSON 我有一个可行的解决方案 但它遇到了 N 1 问题 我想通过使用临时解决方案来摆脱它 EntityGraph 所