- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 EntityGraphs 时 JPA 1 级缓存如何工作?
如果我调用:
Tool tool = toolRepository.findOne(id, CustomEntityGraph.fromAttributes(new String[] { "system", "manufacturer" }, EntityGraphType.LOAD));
(顺便说一句,我在这里使用的是 Spring Data,这是我的自定义存储库中的一种方法,但这与问题无关)。
这将使用正确的 SELECT 语句访问数据库,包括系统和制造商表所需的所有连接。这工作得很好,符合预期。
但是如果我这样称呼:
Tool tool = toolRepository.findOne(id);
Tool toolEg = toolRepository.findOne(id, CustomEntityGraph.fromAttributes(new String[] { "system", "manufacturer" }, EntityGraphType.LOAD));
第一个 findOne 调用将通过对 Tool 表的 SELECT 访问数据库,这没问题,但第二个 findOne 不会访问数据库,而是从缓存中获取 Tool 实体。这是一个大问题,因为缓存的实体显然没有加载系统或制造商,如果我尝试访问它们,它们将被延迟加载,这是我试图通过 EntityGraph 避免的。
这是应该发生的吗?我期待第二次调用再次访问数据库,因为即使 Tool 实体已经缓存,EntityGraph 指定从其他 2 个未缓存的表中获取实体。如果 EntityGraph 总是尝试从缓存中获取实体并且不考虑作为图形一部分的属性是否也在缓存中那么对我来说这个功能基本上是无用的因为它只会带来很多问题路。
最佳答案
在两条指令之间清除实体管理器似乎对我有用:
Tool tool = toolRepository.findOne(id);
em.clear();
Tool toolEg = toolRepository.findOne(id, CustomEntityGraph.fromAttributes(new String[] { "system", "manufacturer" }, EntityGraphType.LOAD));
缺点是文档对 #clear()
的描述:
Clear the persistence context, causing all managed entities to become detached. Changes made to entities that have not been flushed to the database will not be persisted.
我尝试使用 #detach(tool)
但不起作用。
关于hibernate - JPA/Hibernate EntityGraph 和缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43736691/
我看过各种帖子,描述 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
我是一名优秀的程序员,十分优秀!