gpt4 book ai didi

java - 了解 spring-data 如何处理 @EntityGraph

转载 作者:搜寻专家 更新时间:2023-10-30 21:28:07 25 4
gpt4 key购买 nike

(我为这个问题做了一个SSCCE。)

我有 2 个简单的实体:EmployeeCompanyEmployeeCompany 有一个 @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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com