- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
(我为这个问题做了一个SSCCE。)
我有 2 个简单的实体:Employee
和 Company
。 Employee
与 Company
有一个 @ManyToOne
关系,采用默认获取策略(eager)。
我希望能够在没有 Company
的情况下加载 Employee
而无需更改 Employee
中定义的获取策略,因为我需要做这仅适用于一个用例。
JPA 的实体图似乎就是为了这个目的。
所以我在类Employee
上定义了一个@NamedEntityGraph
:
@Entity
@NamedEntityGraph(name = "employeeOnly")
public class Employee {
@Id
private Integer id;
private String name;
private String surname;
@ManyToOne
private Company company;
//Getters & Setters
还有一个像这样的EmployeeRepository
:
public interface EmployeeRepository extends CrudRepository<Employee, Integer> {
@EntityGraph(value = "employeeOnly", type = EntityGraph.EntityGraphType.FETCH)
List<Employee> findByCompanyId(Integer companyId);
}
尽管使用了@EntityGraph
,但我可以在日志中看到 Company
仍由 hibernate 加载:
2016-11-07 23:16:08.738 DEBUG 1029 --- [nio-8080-exec-2] org.hibernate.SQL : select employee0_.id as id1_1_, employee0_.company_id as company_4_1_, employee0_.name as name2_1_, employee0_.surname as surname3_1_ from employee employee0_ left outer join company company1_ on employee0_.company_id=company1_.id where company1_.id=?
2016-11-07 23:16:08.744 DEBUG 1029 --- [nio-8080-exec-2] org.hibernate.SQL : select company0_.id as id1_0_0_, company0_.name as name2_0_0_ from company company0_ where company0_.id=?
为什么?如何避免这种情况?
最佳答案
Hibernate 不支持将非惰性属性作为惰性处理,即使使用实体图也是如此。这有一个问题:HHH-8776 , 但现在已修复。
以前,暂时唯一的解决办法是让关联变得懒惰。
关于java - 了解 spring-data 如何处理 @EntityGraph,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40475690/
我看过各种帖子,描述 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
我是一名优秀的程序员,十分优秀!