问题标签 [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.
sql - JPA EntityGraph 使用子图制作笛卡尔积
我正在使用 Spring Data JPA 和实体图。我有以下实体结构:
Result
实体有一个实体列表,SingleQuestionResponse
实体SingleQuestionResponse
有一组Answer
实体(markedAnswers)。
并且Answer
只有简单类型的字段。
现在,我希望能够在一个查询中获取结果以及所有响应和标记的答案。为此,我在Result
课堂上注释了:
一个使用示例是:
我注意到,调用该findResultsByResultSetId
方法(以及使用此实体图的其他方法)会导致responses
( SingleQuestionResponse
entities) 乘以markedAnswers
. 我的意思是result.getResponses()
返回的SingleQuestionResponse
对象比它应该返回的对象多(它为每个标记的答案返回一个响应对象)。
我意识到这是由于 Hibernate 使用连接制作了笛卡尔积,但我不知道如何解决它。
你能帮忙吗?谢谢
spring-boot - EntityGraph 进行两个 sql 查询
EntityGraph 进行两个 sql 查询:期望 join,但得到两个查询。春季启动版本:2.5.1
https://github.com/spring-projects/spring-data-jpa/issues/2241
java - JPA 选择集从 MyObject 加载实体图
我有那个实体:
我尝试获取subParagraphs
集合,并且集合中的 Paragraph 对象必须没有惰性questions
集合。我使用该查询:
它抛出异常:
在我的情况下我可以做些什么来修复异常?
join - Spring Data JPA:使用 @EntityGraph 和 EntityGraphType.LOAD 不会加入 EAGER @OneToOne 关系
我有以下实体关系(在 Kotlin 中):
发票实体:
联系实体:
会计联系实体:
当我执行查询方法时
然后我希望查询包含JOIN
Contact-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)
,那么两个表都会按预期加入。
spring-boot - 有没有办法在 Spring Data JPA 的单个 SELECT 查询中获取具有关联类的类?
我有两个类,A和B具有一对多的关系。
我有一个A的 JPA 存储库,我观察到当我使用存储库方法从数据库中获取A时,不包括B 。当我想访问B时,会执行额外的 SELECT 查询来获取关联的B(如果有 100 个关联的B,则执行 100 个额外的查询)。使 FetchType.EAGER 仅在执行这些附加 SELECT 查询时更改。即它们在主 SELECT 查询之后被调用。无论哪种方式,都会执行额外的 SELECT 查询来获取关联的类。
这是自然行为吗?我发现JPA Entity Graphs是这个问题的解决方案/使用单个 SELECT 查询获取A和B 。有没有其他方法可以解决这个问题?问题@EntityGraph
是它必须分别用每个存储库方法进行注释。另外,有没有办法注释@EntityGraph
一次,所以它会影响存储库中的所有方法?
我正在使用 Spring Boot 2.5.1。提前致谢!
java - 如何以最佳方式处理“无法通过子选择加载集合:”
技术:Spring Data、QueryDSL
有一个实体与实体图和三个不包含在实体图中的集合
当我调用 JPA Repository 方法时:
它工作正常并返回包含三个未包含在 entityGraph 中的集合的数据。
但是要实现指定的排序,我必须实现另一个存储库方法:
它从 db 返回数据,但是当映射器尝试获取未包含在 entityGraph 中的三个集合中的任何一个时,我遇到了异常:
在 IDEA 调试中,它看起来像:无法评估表达式方法抛出 'org.hibernate.exception.GenericJDBCException' 异常。
我尝试用 FetchType.SELECT 替换 FetchType.SUBSELECT。它有效,但会导致 n+1 问题。
我试图将此集合添加到 entityGraph,但得到了 MultipleBadException。
如何以最佳方式解决问题?
java - 当连接由实体图指定时,如何对连接实体使用“org.hibernate.lockMode”查询提示
假设我们有一个这样的查询方法:
可以使用以下代码重写相同的内容@EntityGraph
:
如果我们想为第一种方法添加一个悲观锁,我们会这样做(该方法取自这个答案:https ://stackoverflow.com/a/63842764/5572007 ):
问题是:是否可以对第二个查询(带有实体图的查询)做同样的事情?在这种情况下如何指定提示值?
我尝试了“org.hibernate.lockMode.children”甚至“org.hibernate.lockMode.children1_”(后者来自生成的Hibernate查询)。两个提示都不起作用。
jpa - 在 Eclipselink 中使用命名实体图不起作用
我有 2 节课
收藏品
和汽车
当我尝试使用汽车收藏时
我明白了{IndirectList: not instantiated}
。不给出错误,但 Cars 不加载。
如果您为 Cars 字段“EAGER”添加到 Collections 实体
有用。但随后 Cars 将始终加载。
我使用 Jakarta EE9 和 Eclipselink
java - @EntityGraph 是应用于 Select 还是 FROM?
我正在尝试调试 n+1 查询问题,并尝试使用 EntityGraphs 来解决它。
说我有以下查询
并且组织有一些额外的字段说“属性”
EntityGraph
优化会应用于选择吗?
或者我应该这样做吗?
java - @NamedEntityGraph 的子类子图不起作用
您好,我从 2018 年看到了一些类似的问题,但没有太多信息
我有以下课程
- 员工
- 地址
- 城市
- 工程师
- 笔记本电脑
使用 NamedEntityGraph,我想在单个查询中实现检索员工的所有信息。城市的属性节点和子图工作正常,但子类子图不适用于此示例。
我的期望是我将在一个带有 join 子句的查询中检索笔记本电脑信息,但实际上有两个 select 语句
我找不到任何报告有关此错误的页面,我做错了什么吗?
代码仓库-> https://github.com/dkasiaras/pocs/tree/main/jpa-graph-entity