gpt4 book ai didi

java - 仅在一种用例中延迟加载

转载 作者:行者123 更新时间:2023-12-01 09:17:04 25 4
gpt4 key购买 nike

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

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

我制作了一个像这样的简单 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”就会被接受。

有什么想法吗?

最佳答案

没有简单的方法。可能没有办法完全停止 - 这将取决于您的持久性提供者。这就是为什么应该主要将关系定义为惰性关系并在需要时立即加载,而不是相反。

例如,参见:

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

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

@Projection(name="EmployeeSummaryProjection", types = {Employee.class})
interface EmployeeSummaryProjection{

/declare methods matching the data you wish to return
}

如果返回的数据是只读的,则上述任一方法都可能是解决方案。

关于java - 仅在一种用例中延迟加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40469865/

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