jpa使用标准api延迟获取多个级别的实体

2023-11-22

我使用 JPA2 及其 Criteria API 从数据库中选择我的实体。该实现是 WebSphere Application Server 上的 OpenJPA。我的所有实体都是使用 Fetchtype=Lazy 建模的。

我从数据库中选择一个具有某些条件的实体,并希望立即加载子表中的所有嵌套数据。 如果我有一个数据模型,其中表 A 连接到表 B,我可以在条件查询中使用 Fetch 子句:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<A> cq = cb.createQuery(A.class);
Root<A> root = cq.from(A.class);
Fetch<A,B> fetch = root.fetch(A_.elementsOfB, JoinType.LEFT);

这很好用。我得到一个元素 A 并且它的 B 的所有元素都被正确填充。 现在表 B 与表 C 具有 oneToMany 关系,我也想加载它们。因此,我将以下语句添加到我的查询中:

Fetch<B,C> fetch2 = fetch.fetch(B_.elementsOfC, JoinType.LEFT);

但这不会做任何事情。

有谁知道如何在一个查询中获取多级实体?


它不能与 JPQL 一起使用,也无法使其在条件查询中工作。规范将获取的实体限制为直接从返回的实体引用的实体:

关于使用 CriteriaQuery 进行 fetch join:

fetch 方法引用的关联或属性必须是 从作为结果返回的实体或可嵌入对象引用 的查询。

关于 JPQL 中的 fetch join:

FETCH JOIN 子句右侧引用的关联 必须是引用自的关联或元素集合 作为查询结果返回的实体或可嵌入对象。

OpenJPA 文档中也提到了同样的限制。

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

jpa使用标准api延迟获取多个级别的实体 的相关文章

随机推荐

  • Python for 循环中的“pass”和“continue”有区别吗?

    两个Python关键字之间有什么显着差异吗continue and pass就像例子中一样 for element in some list if not element pass and for element in some list
  • 可以改变JButton的形状吗?

    是否可以将 JButton 的形状从矩形更改为圆形 Sean Cogan 提供的链接就是您所需要的 如果您想要简短 请设置一个图像 圆形或任何您希望按钮看起来相似的形状 使用setIcon然后在 JButton button1 上设置这些值
  • 获取类转换异常,其中两个类完全相同

    我正在做一个 JBoss SEAM 项目 当我查看表单时 我收到此错误 java lang ClassCastException it cogitoweb csi entity csiorelav CsiTipoLav cannot be
  • Unix 域:connect():没有这样的文件或目录

    如标题所述 我的连接 调用具有相应地址的 unix 域类型套接字会导致错误ENOENT 没有这样的文件或目录 两个套接字已正确初始化 并且相应地创建并绑定了套接字文件 服务器和客户端套接字在不同的进程中运行 尽管客户端进程是 fork 和
  • 使用标记列表构建抽象语法树

    我想从令牌列表构建 AST 我正在制作一种脚本语言 并且已经完成了词法分析部分 但我不知道如何创建 AST 所以问题是 我该如何采取这样的事情 WORD int WORD x SYMBOL NUMBER 5 SYMBOL 并将其转换为抽象语
  • GWT - 在单元树中添加和删除节点

    这里我有一个完整且非常简单的示例来动态添加 删除 单元树的节点 我的例子效果不太好 似乎有 是刷新问题 只有关闭 展开节点才会显示正确的 结果 我在这个论坛上也没有找到适合这个问题的答案 也许有人可以尝试我的例子并告诉我问题出在哪里 任何其
  • 在一个 JFrame 中使用两个 JPanel

    我正在尝试创建一个程序 允许用户单击按钮将某些内容放入JPanel并允许他们移动该物品 我已经找到了一个很好的布局来允许移动组件 请参阅this关联 但是 我只是好奇创建这样的布局的最佳方法 我的希望是有这样的东西 我怎样才能做到这一点 我
  • Python 读取输入的最快方法

    我想读取一个包含整数列表列表的巨大文本文件 现在我正在执行以下操作 G with open test txt r as f for line in f G append list map int line split 然而 大约需要 17
  • 实时更新 Google Compute Engine 实例类型

    我想知道您是否可以将一个实例的类型更改为另一种实例 例如 n1 标准 1 到 n1 标准 2 我在文档中没有看到任何内容 但可能我错过了一些东西 如果这是不可能的 我如何处理这个问题 还有另一种方法可以进行此更改 您可以停止机器 对其进行编
  • AngularJS ngTable 按日期过滤

    我正在尝试在我的应用程序中设置 ngTable 但它不支持按日期过滤 而且我不知道如何实现它 我最初将数据中的日期作为时间戳 这使我能够由于时间戳的增量性质而对列进行正确排序 但显然我无法输入 9 月并过滤数据 Example row da
  • 两个文本文件的内连接

    希望对两个不同的文本文件执行内部联接 基本上我正在寻找与 GNU join 程序等效的内部联接 这样的事情存在吗 如果没有 则awk or sed解决方案将是最有帮助的 但我的第一选择是 Linux 命令 这是我想要做的事情的一个例子 fi
  • 在应用程序购买恢复交易中,我无法弄清楚代码

    我在我的编码中添加了应用程序内购买 它在购买时运行良好 但当我尝试在删除并再次安装应用程序时添加 Restore Transaction 代码时 它会出现错误并且应用程序关闭 我添加了以下编码 在 onCreate 我写的 startSer
  • MySQL 创建外键的语法

    创建外键时这种语法是否正确 create table department departmentID int not null auto increment primary key name varchar 30 type InnoDB c
  • .NET 中的单元测试 System.Threading.Timer

    如何在 NET中基于System Threading Timer对计时器进行单元测试 System Threading Timer有一个回调方法 您可以通过不实际创建直接依赖项来对其进行单元测试System Threading Timer
  • 使用WebService自动捕获所有未处理的异常

    我有一个 C WebService 应用程序 我想在其中捕获应用程序抛出的所有未处理的异常 我怎样才能做到这一点 由于某种原因 Web 服务不会触发 Application Error 事件 请参阅其他问题 杰夫 阿特伍德先生本人也发表了一
  • Waitress和GUnicorn大数据输入比Flask开发服务器慢很多

    问题描述 我正在尝试创建一个 Flask 应用程序 它应该 仅在本地主机上可见 因此不会降低网络速度 获取相当多的数据 30MB 作为一个大型 numpy 数组 作为输入 并输出相对较小的数据量 大约 1MB 我做了一个快速测试并使用 Fl
  • 如何在本机活动中显示软键盘

    当我尝试使用时ANativeActivity showSoftInput 它不会调出软键盘 我尝试过使用ANativeActivity showSoftInput engine gt app gt activity ANATIVEACTIV
  • 如何保留 EditText 中的换行符?

    当我显示以下内容时忽略新行 private void post String subject String message subject etSubject getText toString message etMessage getTe
  • 如何从插件中的单独 C++ 线程调用发射器回调?

    对于上下文 我从this问题 我需要在另一个线程中调用发射器的回调 我做了一个最小的例子 但它出现了段错误emit Call cb result 我的第一直觉是我对生命周期有疑问env or the emit功能 插件 cpp includ
  • jpa使用标准api延迟获取多个级别的实体

    我使用 JPA2 及其 Criteria API 从数据库中选择我的实体 该实现是 WebSphere Application Server 上的 OpenJPA 我的所有实体都是使用 Fetchtype Lazy 建模的 我从数据库中选择