В вашем случае запросы, структура которых определена статически, действительно не подходят, так как вы действительно умножите количество запросов для записи / изменения / обслуживания.
JPA и Spring Data предоставляют альтернативы для создания гибких запросов и динамической настройки активной загрузки:
JPA 2 - Критерии : Сосредоточены на динамическом построении запросов и активном извлечении отношений.
Он мощный, но для создания критериев требуется важная часть кода котельной плиты.
JPA 2.1 - Диаграмма сущностей : Сосредоточена на активном извлечении отношений.
Этот акцент на страстно извлеченных из отношений.
Это очень просто и не требует кода котельной плиты.
Просто добавьте подсказку в Query/Criteria
, который вы создаете.
Может использоваться с запросами JPQL или критериями.
Spring Data - Технические характеристики : Ориентирован на динамическое построение запросов.
Это оболочка / улучшитель критериев JPA с видением, управляемым доменом. Это мощный инструмент, но он также многословен в настройке.
Spring Data - Запрос по примеру : Сосредоточен на динамически создаваемых запросах.
Это очень просто, дружелюбный клиент. У него есть некоторые ограничения, и я не думаю, что API должен быть разработан для установки режима выборки отношений запрашиваемой сущности.
Для вашего требования я бы ввел два метода репозитория.
Первый из них будет использовать Criteria + Entity Graph, чтобы извлечь выгоду из динамически создаваемых запросов и простой способ установить активное получение отношений для этих случаев:
Получить сущность с аннотацией @ManytoOne, преобразующейся в идентификатор
Получение сущности с аннотацией @ManytoOne, разрешающей для всего объекта
Получение сущности с аннотацией @ManytoOne, разрешающей частичный объект
И второй метод будет использовать Entity Graph + JPQL, чтобы извлечь выгоду только из нетерпеливого извлечения для этого:
Извлечение сущностей с аннотацией @ManytoOne, преобразующейся в идентификатор
С Criteria + Entity Graph вы могли бы получить единственный метод, который делает все, но иметь сложный метод, который делает много вещей, не обязательно лучший выбор.