- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个 util 方法:
public <T> Optional<T> fetch(Class<T> clazz, Object id, String... relations) {
EntityGraph<T> graph = entityManager.createEntityGraph(clazz);
Stream.of(relations).forEach(graph::addSubgraph);
return Optional.ofNullable(entityManager.find(clazz, id, Collections.singletonMap("javax.persistence.loadgraph", graph)));
}
因此,如果用户
有惰性订单
和钱包
,我可以这样做:
Optional<User> user = fetch(User.class, 1, "orders", "wallets");
但我不知道如何接受订单
或钱包
惰性集合。如果我能调用这样的方法那就太好了:
Optional<User> user = fetch(User.class, 1, "orders", "orders.products", "wallet");
如何扩展该方法来实现此目的?
最佳答案
我决定使用下一个方法:
public <T> Optional<T> fetch(Class<T> clazz, Object id, String... relations) {
EntityGraph<T> graph = entityManager.createEntityGraph(clazz);
Stream.of(relations).forEach(path -> {
String[] splitted = path.split("\\.");
Subgraph<T> root = graph.addSubgraph(splitted[0]);
for (int i = 1; i < splitted.length; i++)
root = root.addSubgraph(splitted[i]);
});
return Optional.ofNullable(entityManager.find(clazz, id, Collections.singletonMap("javax.persistence.loadgraph", graph)));
}
它只有一个缺陷。接下来的两个将起作用:
Optional<User> user = fetch(User.class, 1, "orders", "orders.products", "wallet");
Optional<User> user = fetch(User.class, 1, "orders.products", "wallet");
下一个不会:
Optional<User> user = fetch(User.class, 1, "orders.products", "orders", "wallet");
这是因为 orders
覆盖 orders.products
。我认为这已经足够了,因为从逻辑上讲,如果您想加载 orders.products
,则无论如何都必须加载 orders
。
关于java - JPA 动态 EntityGraph 和子图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40796986/
我看过各种帖子,描述 JPA EntityGraph 允许在运行时选择图表。我不太清楚这指的是什么。 出于善意和尊重,我想引用这篇有用的文章:https://www.baeldung.com/jpa-
使用 EntityGraphs 时 JPA 1 级缓存如何工作? 如果我调用: Tool tool = toolRepository.findOne(id, CustomEntityGraph.fro
我使用 EclipseLink 2.6.3 作为 JPA 提供程序。我有两个实体: @Entity public class ClassA{ @Id private String uu
我创建了一个 util 方法: public Optional fetch(Class clazz, Object id, String... relations) { EntityGrap
我正在尝试让命名实体图正常工作。基本上,我有一个可以有零个或多个地址的客户。当我查询以获取客户列表时,我需要客户的字段,而不是关联的地址。当我查询特定客户时,我需要它的字段和所有关联的地址。所以,我一
我想使用 jpql 或 jpa 实体图加载相关实体。 似乎两者都做同样的事情。 我为什么要使用 实体图 而不是普通 jpql ?有什么好处吗? 使用jpql有什么区别: select distinct
当我有以下实体时。 @Entity class Article { @OneToMany Set comments; } @Entity class Comment { @ManyToOn
在存储库中(注意: SELECT_LIST 只是 from Organization org where in ( ... ) and in (...) ), IdentifiableWithName
我正在使用 JPA 使用 Spring Boot 开发应用程序。在应用程序中,我公开了一个休息 API。我不想使用 Spring data rest,因为我想完全控制数据。 我不知道如何动态使用 En
(我为这个问题做了一个SSCCE。) 我有 2 个简单的实体:Employee 和 Company。 Employee 与 Company 有一个 @ManyToOne 关系,采用默认获取策略(eag
(使用 Spring Data JPA)我有两个实体 Parent& Child,它们之间具有 OneToMany/ManyToOne 双向关系。我添加了 @NamedEntityGraph像这样的父
我正在尝试使用类型安全方法 EntityGraph.addAttributeNodes(Attribute ... attribute)用于构建我的实体图。我有一个带有 @MappedSupercla
我找到了这个 documentation关于实体图...阅读后,它让我想到您可以使用实体图来检索给定实体的 @Basic 字段的子集(直到现在,我已经使用用于检索关系的实体图,例如,加载员工[包括其所
我目前正在处理一个我无法解释的错误,所以我在这里寻求帮助。 我正在使用 Spring Data 获取我的对象,它们都由名为“FlagCMS”的列管理,如果设置为“S”,则意味着该对象不应链接到任何其他
我有用户实体: @ToString @Data @Entity @Table(name = "users") @NamedEntityGraph(name = "UserWithItems",
当我发现某些实体使用Hibernate Search ORM时,我试图消除不必要数据的加载。 。该框架提供的投影机制由于其局限性(例如,您需要的所有数据必须存储在索引中)而不太方便。 有没有办法使用E
我有一个与 ListingAttachment 具有一对多关系的 Listing 表。现在在整个应用程序中,每个表/实体都有 deleteFlag 并且每个存储库应该仅使用 deleteFlag 0
我有一个 Spring 应用程序。登录后,我将调用 getUserByEmail() 方法。 我只需要用户和角色数据。根据角色,我将显示不同的 View ,每个 View 都有不同的数据,需要不同的用
Spring Data JPA 是否有可能做到这一点?像这样: public interface UserDao extends CrudRepository { @EntityGraph(value
我见过各种描述JPA EntityGraph允许在运行时选择图形的帖子。我也不完全清楚这指的是什么。。出于诚意和尊重,我想将这篇有用的文章作为参考:https://www.baeldung.com/j
我是一名优秀的程序员,十分优秀!