问题标签 [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 投票
4 回答
3887 浏览

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

给定以下域模型,我想加载所有Answers,包括它们Value的 s 和它们各自的子子项,并将其放入 anAnswerDTO中,然后转换为 JSON。我有一个可行的解决方案,但它遇到了我想通过使用 ad-hoc 摆脱的 N+1 问题@EntityGraph。所有关联均已配置LAZY

在此处输入图像描述

@EntityGraph在方法上使用 ad-hocRepository我可以确保预先获取值以防止 N+1 出现Answer->Value关联。虽然我的结果很好,但由于延迟加载 s 的selected关联,还有另一个 N+1 问题MCValue

使用这个

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

我如何告诉 JPA 仅selected在值为 a 的情况下尝试获取关联MCValue?我需要类似的东西optionalAttributePaths

0 投票
2 回答
858 浏览

spring-data-jpa - Spring Data JPA + JpaSpecificationExecutor + NamedEntityGraph

我有两个实体。父母和孩子。

ChildRepository.java

我正在尝试按标准查找子实体,它应该始终有父实体。

我收到异常,它试图在地址表中找到 parentObj。

我找到了这个链接并尝试了Joep给出的解决方案,但同样的错误。

Spring Data JPA + JpaSpecificationExecutor + EntityGraph

我错过了什么。我无法理解为什么/如何限制在子对象中查找 parentObj,因为地址没有对父对象的引用。

我正在通过 Address.street 进行搜索。

我也尝试过临时实体图。例外:

0 投票
1 回答
1121 浏览

java - 具有不同 EntityGraph 的 Spring Data JPA findAll

在 Spring Data JPA Repository 中,我需要指定多个执行相同操作的方法(例如 findAll),但指定不同的 @EntityGraph 注释(目标是优化方法以在不同服务中使用)。

埃斯。

在Java中我们不能多次签名相同的方法,那么如何管理呢?

不使用JPQL可以吗?

谢谢,

加布里埃尔

0 投票
0 回答
253 浏览

hibernate - 休眠与实体图导致 OneToMany 上的无限循环

我有 2 个实体:

当我获取数据库时这很好用,但是由于延迟加载,当我想在将数百个 Foo 映射到 DTO 后将它们发送到 UI 时,它会很慢。

我试图用 EntityGraph 解决这个问题,但是当我像这样将 Bar 列表放入 EntityGraph 时:

并尝试使用 EntityGraph 获取,我得到一个无限循环。我尝试了很多东西,但似乎没有任何效果。

知道我错过了什么吗?

谢谢!

0 投票
1 回答
162 浏览

hibernate - HibernateCursorItemReader 和 EntityGraph

由于结果集的大小,我需要在作业中使用 HibernateCursorItemReader,但我无法使其与 EntityGraph 一起工作以急切地获取一些关系。我正在使用 QueryProvider。

没有任何 EntityGraph 就不会发生连接,并且读取器可以正常工作,但是在批处理期间,Hibernate 会执行大量 SQL 查询以延迟获取数据。这导致处理非常缓慢。

使用查询提示来获取它,任务在此时冻结Loader.class

ResultSet rs = session.getJdbcCoordinator().getResultSetReturn().extract( st );

上面的代码在doOpenHibernateCursorItemReader 的方法中调用,在第一个项目之前。没有错误,没有堆栈跟踪,几分钟内什么也没有,直到我停止 JVM。

我现在正在使用 HibernatePagingItemReader,使用相同的 QueryProvider 并提示急切地获取数据。但是在使用集合获取实体时分页效率不高,JVM 经常会出现内存不足的情况。

抱歉缺少示例代码,但我所拥有的是提到的类的默认配置和实现,没有什么具体可展示的。我认为光标阅读器是解决方案,但它如何与 EntityGraph 一起使用?

编辑 1

EntityGraph 和 HibernateCursorItemReader 一起使用似乎没有问题。耐心等待更多时间,处理开始了。它只是比平常慢,但是休眠的光标阅读器的工作方式与分页阅读器相同,获取所有实体图。

0 投票
2 回答
506 浏览

java - 如何在 JpaRepository 中定义自定义 findAll 方法?

我有两个 api 端点:

  • /api/posts- 获取分页帖子列表
  • /api/countries/{country}/posts- 按国家/地区获取分页帖子列表

所以我有以下实体:

我已经定义了以下存储库。请注意,我是如何为最后两个方法定义实体图的,我需要这样,因为我不想覆盖findAll()方法,因为将来我需要加载没有任何关系的帖子。还有一件事我希望它成为谓词,以便在各种不同的服务中我可以重用方法,而不是为每个查询创建方法......

问题是当我findAllPostResources使用谓词和可分页参数调用时:

它忽略谓词参数并执行以下查询:

如您所见,SQL ( WHERE country_id = ?) 中没有 WHERE 原因。

那么,如何创建 findAll() 方法并定义谓词、分页以及在 JpaRepository 中使用什么实体图?或者这是无法通过这种方式实现的,我需要创建自定义存储库实现?

0 投票
1 回答
3234 浏览

java - Spring data JPA - 使用@EntityGraph导致“指定的实体图不适用于实体”警告

我将我的应用程序从 spring boot 2.2.5 升级到 2.3.3,并且我正在使用带有 5.4.20.Final 的 spring data JPA starter。我的实体在编译时得到了增强。

现在,当我使用@EntityGraph带有属性的注释而attributePaths不是覆盖findAll方法时,JpaRepository我收到了这个警告:

即使此警告 - 图表已正确获取 - 我只能在日志中看到一个 SQL 查询,并且应用程序的行为与更新前一样。

这是我的存储库代码:

这是我的实体:

如何解决这个警告?我可以看到这个警告发生在休眠TwoPhaseLoad类的这些行中:

0 投票
1 回答
210 浏览

hibernate - EntityGraph 不获取动态提供的关系

我正在尝试使用 spring JPA 存储库和实体图加载实体的惰性属性,EntityGraph 不获取动态提供的关系,而是根据实体中为该属性定义的静态获取类型获取属性。

使用休眠 - 5.2.17.Final , Spring - 4.3.20.RELEASE , Spring data JPA - 1.11.22.RELEASE

0 投票
1 回答
349 浏览

spring - Spring Data JPA + 字节码增强

是否可以使用在父实体类中使用 @LazyToOne 、 @LazyGroup 设置为惰性并启用字节码增强的 JPA 接口(实体图)急切地加载 @*ToOne 属性?我正在尝试使用实体图急切地加载此类属性,但是当查询父实体时,它正在为此类 @*ToOne 属性触发另一个查询。

尝试使用另一种方法来覆盖实体类中的静态获取类型,包括添加了字节码增强功能的 @LazyToOne。

使用 Spring 5.1.3、Spring JPA 2.2、Hibernate 5.4.19

更新:数据 JPA 正在按预期工作,我可以看到我试图急切地获取的属性的连接,但是这些惰性属性没有被连接查询响应初始化,并且休眠导致每个查询都引用了 @LazyToOneOption 注释的属性.NO_PROXY 并且已经在我的存储库中使用实体图急切地获取。

我如何避免第二次选择,因为我急切地从 JPA 存储库中的实体图中获取了该数据?

任何帮助将不胜感激。

0 投票
1 回答
40 浏览

java - 无法将 @NamedEntityGraph 与 @ElementCollecion 一起使用

我正在尝试在其上设置带有 NamedEntityGraph 的简单实体。不幸的是,它不起作用。你能知道如何解决它吗?

ServiceType 实体具有@ElementCollection的只是与实体关联的SetID 。运行时我得到:StringPictureModel

Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is java.lang.IllegalArgumentException: Unable to locate Attribute with the the given name [backgroundPicIds] on this ManagedType [pl.mihome.djcost.model.ServiceType]