我有一个有很多关系的实体。我无法更改它们,因为映射用于代码的许多部分。
仅在一个用例中,我希望能够仅加载实体而不加载它们的关系。
我做了一个简单的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'。
有什么想法吗?
答案 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
如果返回的数据是只读的,那么上述任何一个都可能是一个解决方案。