2016-11-07 3 views
0

У меня есть сущность с большим количеством отношений. Я не могу их изменить, потому что отображение используется во многих частях кода.Lazy loading только в одном случае использования

В одном только одном случае я хотел бы иметь возможность загружать только объекты, а не их отношения.

Я сделал простой 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

Похоже, вам, вероятно, нужен план извлечения. – chrylis

ответ

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_

или, более просто использовать проекцию Спринг данных для возврата подмножества данных:

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 
} 

Если возвращаемые данные только для чтения, то либо из выше может быть решением.