问题标签 [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.
spring - Spring Data JPA,在 CrudRepository 接口中参数化 @EntityGraph
Spring Data JPA 是否有可能做到这一点?像这样:
能够在运行时将 graphName 传递给方法并使用一组需要的集合调用加载?此构造不起作用,产生编译时错误。围绕它的任何游戏也失败了......
因此,我在 User 类中有多个集合,我想按条件加载它们;
现在,我只需隐式声明所有方法,如下所示:
谢谢你的建议!
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 存在,这对我来说就足够了。如果不存在,则不执行额外查询。我怎样才能做到这一点?
hibernate - Spring Data 中的命名实体图命名范围
我最近发现了命名实体图,我正在尝试以一种干净、干燥的方式来实现它们。
我不确定(阅读 JPA 和 Spring Data Docs 并没有回答)是所使用名称的范围。是它们定义的类的私有,还是我可以做这样的事情:
其中 Route 中的 Stop.deep 子图指的是 Stop 中的命名实体图。
谢谢!
sql - NamedEntityGraph 仍然导致延迟加载异常
我有以下实体结构:
所以我在每个实体类的顶部定义了以下命名实体图,这样我就可以优化我的查询,以了解我需要在这个层次结构中走多远:
路线:
停止:
孩子:
接触:
我在我的 Repository 类中使用它们:
但是,我看不到正在执行任何连接查询,并且当我尝试访问停靠点的子节点时会抛出一个lazyinit 异常。我的理解是,这就是如何使用实体图来优化查询(即,当我必须为每个单独的站点获取子节点时出现 n+1 问题),但我没有运气让它工作。
关于我做错了什么的任何建议?
java - 复合主键上的 Spring 数据和 @EntityGraph
我有这个代码:
我想@EntityGraph
在我的存储库中加载我的复合主键的数据,因为我不想将它放入Fetch.EAGER
.
但我有这个错误:
抛出异常[请求处理失败;嵌套异常是 org.springframework.dao.InvalidDataAccessApiUsageException:属性 [contactSupplierFunctionId] 不是托管类型;嵌套异常是 java.lang.IllegalArgumentException:属性 [contactSupplierFunctionId] 不是托管类型] 根本原因 java.lang.IllegalArgumentException:属性 [contactSupplierFunctionId] 不是托管类型
有可能做到这一点@EntityGraph
吗?
你有其他解决方案吗?
谢谢
java - 无法在 JPQL 查询中以实体图作为提示,使用左连接和连接提取来获取数据
我正在使用 Jpa 2.2 和 Hibernate 5.3.7 final jar。以下是测试用例的实体和代码未正确执行:
讲师实体:
身份证明实体:
车辆实体:
和文件实体:
我正在从 MySQL 数据库中获取数据,代码如下所述作为 JUnit 测试:
但我只想获取那些在数据库中存在 IdProofs 的教师以及他们在数据库中存在文档的唯一车辆。所以我编写了案例 3。但案例 3 导致以下异常:
请让我知道如何满足我的案例 3 要求,以获取在 DB 中存在 IdProofs 的所有讲师以及在 DB 中存在文档的唯一车辆。
java - 在 DAO 中使用 JPA 实体图
我在我的 Entity 类上定义了 JPA Entity Graph,如下所示。
用户表.java
要求是有时我想连同照片一起获取用户,而在其他一些情况下,我只想从数据库中加载用户,而不是照片。
现在,我为 User - UserDAO.java创建了一个 DAO 类。在那里,我有两种方法,每种方法用于一种情况。
我有点担心 DAO 层中的 API,因为它现在包含 2 个方法,例如findByEmail和findByEmailWithPhotos,它们也可以急切地加载照片。这是正确的方法吗?我们真的应该为每个定义的实体图使用一种 DAO 方法吗?某种建造者模式在这里会更有效吗?任何建议表示赞赏。
更新
为了进一步解释我觉得这个设计不好的地方如下。假设我们在用户上有 3 个实体图
user-graph-with-photos
user-graph-with-messages
user-graph-with-followers
那么在DAO中就需要有如下方法:
- 查找用户
- findUsersWithPhotos
- findUsersWithMessages
- findUsersWithFollowers
- findUsersWithPhotosAndMessages
- findUsersWithPhotosAndFollowers
- findUsersWithMessagesAndFollowers
- findUsersWithPhotosAndMessagesAndFollowers
hibernate - JPA EntityGraph DISTINCT 参数导致笛卡尔积
2 我有一个具有 4 个 1:n 关系的实体
我想使用实体图进行急切获取
此方法按预期工作:我在数据库中有 8 个条目,它返回 8 ReportMessage 但是,当我向查询添加参数时,我得到了笛卡尔积:
我希望得到 1 个 ReportMessage 但得到 84 个。使用命名查询我得到相同的结果。这是怎么回事?
spring-boot - findAll() 上的 @NamedEntityGraphs
我在我的应用程序中使用 @NamedEntityGraph
当我在存储库中使用它时
我得到了预期的所有结果。但是对于不同的情况,我需要几个版本的 findAll() 。就像是
但是如果我尝试在存储库中定义一个新的方法名称,我会收到一个应用程序上下文错误,因为 Spring 无法解析 mehtod 名称。
有没有可能得到这样的方法?
谢谢
马蒂亚斯
spring - 多次在多对多关系加载实体上的实体图 - Spring Data JPA
我的两个实体之间有@ManyToMany 关系。当我尝试将父母与他们的孩子一起加载时,父母会重复响应有效载荷。我想解决我的问题EntityGraphs
。
这是带有注释的父级。
这是父存储库中的代码。
我的两个实体之间有多对多的关系。但我想得到像
但是我为每个组合都得到了父母..
在那里我得到了parent2。
但我想要的是只获得一次 parent1 ,而不是重复。使用实体图时。