只在一个用例中加载延迟

时间:2016-11-07 16:24:46

标签: java spring-data

我有一个有很多关系的实体。我无法更改它们,因为映射用于代码的许多部分。

仅在一个用例中,我希望能够仅加载实体而不加载它们的关系。

我做了一个简单的CRUDRepository:

public interface EmployeeRepository extends CrudRepository<Employee, UUID> {
  List<Employee> findByCompanyId(UUID companyId);
}

如何在没有改变映射注释的情况下加载Employee没有关系?

我试过了:

public interface EmployeeRepository extends CrudRepository<Employee, UUID> {
  List<Employee> findLazyByCompanyId(UUID companyId);
}

这个编译但实体仍然没有延迟加载。如果没有进行延迟加载,我很惊讶接受关键字'Lazy'。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

没有简单的方法。可能没有办法完全停止 - 这将取决于您的持久性提供程序。这就是为什么大多数人将关系定义为懒惰并在需要时急切地加载,而不是相反。

例如见:

JPA and eclipselink - Overriding FetchType.Eager

How to override FetchType.EAGER to be lazy at runtime

我可以建议的是使用构造函数表达式返回非托管用户列表。

http://www.objectdb.com/java/jpa/query/jpql/select#Result_Classes_Constructor_Expressions_

或者,更简单地使用Spring Data投影返回数据的子集:

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#projections

format

如果返回的数据是只读的,那么上述任何一个都可能是一个解决方案。