(Я сделал SSCCE для этого вопроса.)
У меня есть 2 простых объекта: Employee
и Company
. Employee
имеет отношение @ManyToOne
с Company
с стратегией выборки по умолчанию (нетерпеливо).
Я хочу иметь возможность загружать Employee
без Company
без изменения стратегии выборки, определенной в Employee
, потому что мне нужно сделать это только для одного случая использования.
График сущности JPA, по-видимому, предназначен для этой цели.
Итак, я определил a @NamedEntityGraph
для класса Employee
:
@Entity
@NamedEntityGraph(name = "employeeOnly")
public class Employee {
@Id
private Integer id;
private String name;
private String surname;
@ManyToOne
private Company company;
//Getters & Setters
И a EmployeeRepository
следующим образом:
public interface EmployeeRepository extends CrudRepository<Employee, Integer> {
@EntityGraph(value = "employeeOnly", type = EntityGraph.EntityGraphType.FETCH)
List<Employee> findByCompanyId(Integer companyId);
}
Несмотря на использование @EntityGraph
, в журналах я вижу, что Company
по-прежнему загружается спящим:
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=?
Почему? Как этого избежать?