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

spring - Spring Data JPA,在 CrudRepository 接口中参数化 @EntityGraph

Spring Data JPA 是否有可能做到这一点?像这样:

能够在运行时将 graphName 传递给方法并使用一组需要的集合调用加载?此构造不起作用,产生编译时错误。围绕它的任何游戏也失败了......

因此,我在 User 类中有多个集合,我想按条件加载它们;

现在,我只需隐式声明所有方法,如下所示:

谢谢你的建议!

0 投票
1 回答
797 浏览

spring - JPA Lazy with Entity Graph 发出额外的请求

假设我有 2 个对象 A 和 B 一对一相关,B 嵌套在 A 下。B 是延迟初始化和代理的,而且我有一个实体图可以在加载 A 时急切地获取 B,如下所示。

让我们从数据库中查询一个 A 流,并尝试设置 DTO 对象并添加到 DTO 列表中:

我的问题是:

如果 A 的实例没有 B(我的意思是使用 LEFT OUTER JOIN 的 SQL 查询,因为实体图返回 B 的空字段)第 6 行对数据库执行第二个 SQL 查询,例如

从 b 中选择 proxy_b_1.id、proxy_b_1.description 作为 proxy_b_1;

实际上,我们已经知道该特定实例 A 下的实例 B 没有值。它也在调试模式下显示。但是为什么它会进行第二次 SQL 查询呢?我怎样才能减轻这种情况?我的意思是如果我做一个实体图查询,如果嵌套 B 存在,这对我来说就足够了。如果不存在,则不执行额外查询。我怎样才能做到这一点?

0 投票
1 回答
141 浏览

hibernate - Spring Data 中的命名实体图命名范围

我最近发现了命名实体图,我正在尝试以一种干净、干燥的方式来实现它们。

我不确定(阅读 JPA 和 Spring Data Docs 并没有回答)是所使用名称的范围。是它们定义的类的私有,还是我可以做这样的事情:

其中 Route 中的 Stop.deep 子图指的是 Stop 中的命名实体图。

谢谢!

0 投票
1 回答
663 浏览

sql - NamedEntityGraph 仍然导致延迟加载异常

我有以下实体结构:

所以我在每个实体类的顶部定义了以下命名实体图,这样我就可以优化我的查询,以了解我需要在这个层次结构中走多远:

路线:

停止:

孩子:

接触:

我在我的 Repository 类中使​​用它们:

但是,我看不到正在执行任何连接查询,并且当我尝试访问停靠点的子节点时会抛出一个lazyinit 异常。我的理解是,这就是如何使用实体图来优化查询(即,当我必须为每个单独的站点获取子节点时出现 n+1 问题),但我没有运气让它工作。

关于我做错了什么的任何建议?

0 投票
0 回答
281 浏览

java - 复合主键上的 Spring 数据和 @EntityGraph

我有这个代码:

我想@EntityGraph在我的存储库中加载我的复合主键的数据,因为我不想将它放入Fetch.EAGER.

但我有这个错误:

抛出异常[请求处理失败;嵌套异常是 org.springframework.dao.InvalidDataAccessApiUsageException:属性 [contactSupplierFunctionId] 不是托管类型;嵌套异常是 java.lang.IllegalArgumentException:属性 [contactSupplierFunctionId] 不是托管类型] 根本原因 java.lang.IllegalArgumentException:属性 [contactSupplierFunctionId] 不是托管类型

有可能做到这一点@EntityGraph吗?

你有其他解决方案吗?

谢谢

0 投票
2 回答
1491 浏览

java - 无法在 JPQL 查询中以实体图作为提示,使用左连接和连接提取来获取数据

我正在使用 Jpa 2.2 和 Hibernate 5.3.7 final jar。以下是测试用例的实体和代码未正确执行:

讲师实体:

身份证明实体:

车辆实体:

和文件实体:

我正在从 MySQL 数据库中获取数据,代码如下所述作为 JUnit 测试:

但我只想获取那些在数据库中存在 IdProofs 的教师以及他们在数据库中存在文档的唯一车辆。所以我编写了案例 3​​。但案例 3 导致以下异常:

请让我知道如何满足我的案例 3 要求,以获取在 DB 中存在 IdProofs 的所有讲师以及在 DB 中存在文档的唯一车辆。

0 投票
0 回答
283 浏览

java - 在 DAO 中使用 JPA 实体图

我在我的 Entity 类上定义了 JPA Entity Graph,如下所示。

用户表.java

要求是有时我想连同照片一起获取用户,而在其他一些情况下,我只想从数据库中加载用户,而不是照片。

现在,我为 User - UserDAO.java创建了一个 DAO 类。在那里,我有两种方法,每种方法用于一种情况。

我有点担心 DAO 层中的 API,因为它现在包含 2 个方法,例如findByEmailfindByEmailWithPhotos,它们也可以急切地加载照片。这是正确的方法吗?我们真的应该为每个定义的实体图使用一种 DAO 方法吗?某种建造者模式在这里会更有效吗?任何建议表示赞赏。

更新

为了进一步解释我觉得这个设计不好的地方如下。假设我们在用户上有 3 个实体图

  1. user-graph-with-photos
  2. user-graph-with-messages
  3. user-graph-with-followers

那么在DAO中就需要有如下方法:

  1. 查找用户
  2. findUsersWithPhotos
  3. findUsersWithMessages
  4. findUsersWithFollowers
  5. findUsersWithPhotosAndMessages
  6. findUsersWithPhotosAndFollowers
  7. findUsersWithMessagesAndFollowers
  8. findUsersWithPhotosAndMessagesAndFollowers
0 投票
1 回答
370 浏览

hibernate - JPA EntityGraph DISTINCT 参数导致笛卡尔积

2 我有一个具有 4 个 1:n 关系的实体

我想使用实体图进行急切获取

此方法按预期工作:我在数据库中有 8 个条目,它返回 8 ReportMessage 但是,当我向查询添加参数时,我得到了笛卡尔积:

我希望得到 1 个 ReportMessage 但得到 84 个。使用命名查询我得到相同的结果。这是怎么回事?

0 投票
1 回答
905 浏览

spring-boot - findAll() 上的 @NamedEntityGraphs

我在我的应用程序中使用 @NamedEntityGraph

当我在存储库中使用它时

我得到了预期的所有结果。但是对于不同的情况,我需要几个版本的 findAll() 。就像是

但是如果我尝试在存储库中定义一个新的方法名称,我会收到一个应用程序上下文错误,因为 Spring 无法解析 mehtod 名称。

有没有可能得到这样的方法?

谢谢

马蒂亚斯

0 投票
1 回答
2059 浏览

spring - 多次在多对多关系加载实体上的实体图 - Spring Data JPA

我的两个实体之间有@ManyToMany 关系。当我尝试将父母与他们的孩子一起加载时,父母会重复响应有效载荷。我想解决我的问题EntityGraphs

这是带有注释的父级。

这是父存储库中的代码。

我的两个实体之间有多对多的关系。但我想得到像

但是我为每个组合都得到了父母..

在那里我得到了parent2。

但我想要的是只获得一次 parent1 ,而不是重复。使用实体图时。