问题标签 [entitygraph]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
108 浏览

sql - JPA EntityGraph 使用子图制作笛卡尔积

我正在使用 Spring Data JPA 和实体图。我有以下实体结构: Result实体有一个实体列表,SingleQuestionResponse实体SingleQuestionResponse有一组Answer实体(markedAnswers)。

并且Answer只有简单类型的字段。

现在,我希望能够在一个查询中获取结果以及所有响应和标记的答案。为此,我在Result课堂上注释了:

一个使用示例是:

我注意到,调用该findResultsByResultSetId方法(以及使用此实体图的其他方法)会导致responses( SingleQuestionResponseentities) 乘以markedAnswers. 我的意思是result.getResponses()返回的SingleQuestionResponse对象比它应该返回的对象多(它为每个标记的答案返回一个响应对象)。

我意识到这是由于 Hibernate 使用连接制作了笛卡尔积,但我不知道如何解决它。

你能帮忙吗?谢谢

0 投票
0 回答
15 浏览

spring-boot - EntityGraph 进行两个 sql 查询

EntityGraph 进行两个 sql 查询:期望 join,但得到两个查询。春季启动版本:2.5.1

https://github.com/spring-projects/spring-data-jpa/issues/2241

0 投票
0 回答
19 浏览

java - JPA 选择集从 MyObject 加载实体图

我有那个实体:

我尝试获取subParagraphs集合,并且集合中的 Paragraph 对象必须没有惰性questions集合。我使用该查询:

它抛出异常:

在我的情况下我可以做些什么来修复异常?

0 投票
0 回答
65 浏览

join - Spring Data JPA:使用 @EntityGraph 和 EntityGraphType.LOAD 不会加入 EAGER @OneToOne 关系

我有以下实体关系(在 Kotlin 中):

发票实体:

联系实体:

会计联系实体:

当我执行查询方法时

然后我希望查询包含JOINContact-Entity 和 AccountingContactEntity。

但是AccountingContactEntity 缺少它。SELECT相反,为每个 AccountingContactEntity (N+1) 执行一个额外的。不应该EntityGraph.EntityGraphType.LOAD 触发对 ContactEntity 中 FetchType.EAGER 注释的识别,强制JOIN为 AccountingContactEntity 吗?

唯一有效的是添加"contactEntity.accountingContactEntity"到 EntityGraph。

没有其他解决方案吗?

顺便说一句,如果我设置 @OneToOne(fetch = FetchType.EAGER)InvoiceEntity 的 contactEntity 并执行一个 normal find(invoiceId),那么两个表都会按预期加入。

0 投票
0 回答
25 浏览

spring-boot - 有没有办法在 Spring Data JPA 的单个 SELECT 查询中获取具有关联类的类?

我有两个类,AB具有一对多的关系。

我有一个A的 JPA 存储库,我观察到当我使用存储库方法从数据库中获取A时,不包括B 。当我想访问B时,会执行额外的 SELECT 查询来获取关联的B(如果有 100 个关联的B,则执行 100 个额外的查询)。使 FetchType.EAGER 仅在执行这些附加 SELECT 查询时更改。即它们在主 SELECT 查询之后被调用。无论哪种方式,都会执行额外的 SELECT 查询来获取关联的类。

这是自然行为吗?我发现JPA Entity Graphs是这个问题的解决方案/使用单个 SELECT 查询获取AB 。有没有其他方法可以解决这个问题?问题@EntityGraph是它必须分别用每个存储库方法进行注释。另外,有没有办法注释@EntityGraph一次,所以它会影响存储库中的所有方法?

我正在使用 Spring Boot 2.5.1。提前致谢!

0 投票
0 回答
78 浏览

java - 如何以最佳方式处理“无法通过子选择加载集合:”

技术:Spring Data、QueryDSL

有一个实体与实体图和三个不包含在实体图中的集合

当我调用 JPA Repository 方法时:

它工作正常并返回包含三个未包含在 entityGraph 中的集合的数据。
但是要实现指定的排序,我必须实现另一个存储库方法:

它从 db 返回数据,但是当映射器尝试获取未包含在 entityGraph 中的三个集合中的任何一个时,我遇到了异常:

在 IDEA 调试中,它看起来像:无法评估表达式方法抛出 'org.hibernate.exception.GenericJDBCException' 异常。

我尝试用 FetchType.SELECT 替换 FetchType.SUBSELECT。它有效,但会导致 n+1 问题。

我试图将此集合添加到 entityGraph,但得到了 MultipleBadException。

如何以最佳方式解决问题?

0 投票
0 回答
41 浏览

java - 当连接由实体图指定时,如何对连接实体使用“org.hibernate.lockMode”查询提示

假设我们有一个这样的查询方法:

可以使用以下代码重写相同的内容@EntityGraph

如果我们想为第一种方法添加一个悲观锁,我们会这样做(该方法取自这个答案:https ://stackoverflow.com/a/63842764/5572007 ):

问题是:是否可以对第二个查询(带有实体图的查询)做同样的事情?在这种情况下如何指定提示值?

我尝试了“org.hibernate.lockMode.children”甚至“org.hibernate.lockMode.children1_”(后者来自生成的Hibernate查询)。两个提示都不起作用。

0 投票
1 回答
19 浏览

jpa - 在 Eclipselink 中使用命名实体图不起作用

我有 2 节课

收藏品

和汽车

当我尝试使用汽车收藏时

我明白了{IndirectList: not instantiated}。不给出错误,但 Cars 不加载。

如果您为 Cars 字段“EAGER”添加到 Collections 实体

有用。但随后 Cars 将始终加载。

我使用 Jakarta EE9 和 Eclipselink

0 投票
1 回答
6 浏览

java - @EntityGraph 是应用于 Select 还是 FROM?

我正在尝试调试 n+1 查询问题,并尝试使用 EntityGraphs 来解决它。

说我有以下查询

并且组织有一些额外的字段说“属性”

EntityGraph优化会应用于选择吗?

或者我应该这样做吗?

0 投票
0 回答
27 浏览

java - @NamedEntityGraph 的子类子图不起作用

您好,我从 2018 年看到了一些类似的问题,但没有太多信息

我有以下课程

  1. 员工
  1. 地址
  1. 城市
  1. 工程师
  1. 笔记本电脑

使用 NamedEntityGraph,我想在单个查询中实现检索员工的所有信息。城市的属性节点和子图工作正常,但子类子图不适用于此示例。

我的期望是我将在一个带有 join 子句的查询中检索笔记本电脑信息,但实际上有两个 select 语句

我找不到任何报告有关此错误的页面,我做错了什么吗?

代码仓库-> https://github.com/dkasiaras/pocs/tree/main/jpa-graph-entity