问题标签 [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 回答
1179 浏览

spring - 当我尝试使用 2 个集合加载实体时,MultipleBagFetchException 使用 JPA EntityGraph

我有用户实体:

物品:

角色:

我想为用户加载项目和角色。我用@NamedEntityGraph. 这是我的存储库:

但我收到一个错误:

0 投票
1 回答
439 浏览

java - Spring Data JPA 在使用实体图且映射对象不存在时运行额外的选择查询(null)

我有 2 个实体处于一对一的关系中(可以是多对一,但对于这种情况,我认为这并不重要),如下所示:

所以我覆盖了findAll他们默认提供的方法,因为我仍然想使用谓词并且我仍然想将查询连接到另一个表。这几乎完美无缺。创建的查询如下所示

现在的问题是,如果用户从该查询中返回基本上为空(用户的所有属性为空,意味着不存在与条件匹配的属性),那么 Spring 会直接向用户表创建额外的选择查询以查找用户。例如,假设有一个 id=4 的帖子。如果没有 id = 4 的用户,那么 Spring 将创建并运行一个正常的查询,如下所示:

如果数据集很大并且包含不适合原始连接查询的大量记录,则会出现问题,那么将创建和执行太多额外的查询。如果它不符合连接条件,那么我希望忽略该实体记录。使用该示例,我希望忽略任何 id 与 post id 不匹配的用户,而不是另一个 select 语句。

有没有办法防止创建这些额外的选择查询?

0 投票
2 回答
860 浏览

java - Spring JPA Entity Graph 和 Self Reference 发生 N+1 查询

我尝试使用实体图来避免 N+1 查询,它按预期工作。
自引用实体不同,虽然这些代码可以得到正确的列表,但发生了 N+1 查询。

我的问题是如何使用自引用实体消除 N+1 查询?

提前致谢。

日志和代码如下

实体

存储库

架构

0 投票
1 回答
556 浏览

spring - 为什么休眠实体图获取嵌套的惰性集合

我正在尝试使用实体图来触发延迟集合加载,但不幸的是实体图也会触发所有嵌套集合。我正在使用 spring-data-jpa-entity-graph 库在运行时创建实体图。

带有 JPA 存储库的 Spring 服务:

在这种情况下,服务还返回每辆车的零件收集,但我只想获取每个品牌的车辆收集的品牌列表。

我们如何触发仅在第一级加载惰性集合(仅品牌车辆 - 没有车辆零件)?

0 投票
0 回答
51 浏览

hibernate - @EntityGraph 获取实体内部的实体

我正在尝试使用 EntityGraph 获取所有产品翻译。它工作正常,但它也获取所有延迟获取的实体。我的产品实体:

ProductTranslate新实体:

我的仓库:

当我调用 getAllProductBySupplierId 方法时,我会在 Translate 中获取 Product。它也获取产品。
有没有办法不获取 Entity - 用 FetchType.Lazy 注释?

0 投票
1 回答
933 浏览

java - entitygraph 不工作 - 返回所有实体

我正在 springdata jpa 的简单场景中尝试 EntityGraph:

这个想法只是获取一个带有 id 字段的实体并省略另一个名为 name 的字段。

这是要检索的实体:

存储库:

和服务:

如前所述,检索整个区域。

我通过使用更多代码尝试了另一种方法。

添加了一个界面:

并用它来添加一个 impl 类:

并尝试了这个变体:

还将 H2 与 application.properties 设置一起使用:

这是 ide 控制台中使用的 SQL 模板:

一切都没有奏效...

我错过了什么?

0 投票
0 回答
267 浏览

java - 避免“HHH000104:使用集合提取指定的 firstResult/maxResults;在内存中应用!” 使用弹簧数据

我正在使用 Spring Data 并遇到问题HHH000104: firstResult/maxResults specified with collection fetch; applying in memory!警告消息。

导致该问题的实体关系非常简单,我使用@NamedEntityGraph它来获取所有数据:

我的存储库看起来像:

使用 sayfindAll(PageRequest.of(1, 1))给我警告信息:

ohhinternal.ast.QueryTranslatorImpl : HHH000104: firstResult/maxResults 用集合获取指定;在内存中应用!

这对我来说很清楚,我明白为什么会这样。

我从@Vlad Mihalcea 那里看到了如何在使用 Hibernate 时修复它的很好的解释: https ://stackoverflow.com/a/46195656/5108737

但是有没有办法不使用 Hibernate 而仅使用 Spring Data 来修复它?

0 投票
0 回答
43 浏览

jpa - @Any 字段和 @NamedEntityGraph

尝试创建实体图时出现以下错误:

java.lang.IllegalArgumentException:无法在此 ManagedType [com.example.RelatedObject] 上找到具有给定名称 [myRelatedObject] 的属性

这是实体:

似乎实体图的 @Any 注释有问题,但我找不到关于这两者如何相互作用的一条信息。

有谁知道发生了什么?有没有办法通过@Any 使用实体图?

谢谢

0 投票
1 回答
157 浏览

spring-boot - 我们可以使 Spring JPA 规范与 EntityGraph 一起使用吗?

我正在使用实体上的 JPA 规范实现动态查询逻辑。该实体与其他实体有多个关系。我在执行 JPA 规范时遇到了生成太多查询的问题。

有没有办法将 JPA 规范findAll(specification, page)与 EntityGraph 结合起来,以便我们可以在执行相同的查询时生成一个查询?

0 投票
2 回答
145 浏览

spring-boot - 为什么 @EntityGraph 从 Spring 2.2.5 版开始不加载 EAGER?

在 Spring Boot 2.2.5 之前 @EntityGraph 用于加载 EAGER,但在 2.2.5 之后我需要将 EAGER 添加到 attributePaths,例如 attributePaths = {"image", "roles"}

@EntityGraph 如何工作或者我做错了什么。当我更改为较新的版本 2.2.4 -> 2.2.5 时出现了问题