Динамические проекции JPA с расширенным интерфейсом и дженериками
Я хочу использовать динамические проекции Spring JPA, чтобы ограничить количество полей, возвращаемых из запросов. Таблица, которую я использую, широкая, но проекция по-прежнему содержит около 10 полей. Поэтому я пытаюсь использовать динамические проекции. Проблема, похоже, связана с попыткой указать методы в интерфейсе репозитория, так как у меня сначала есть интерфейс, расширяющий JpaRepository с использованием абстрактного класса, а затем у меня есть интерфейс, расширяющий его с использованием фактического класса.
Я пробовал различные подходы к ограничению количества полей, и этот, кажется, наиболее близок к тому, что я хочу использовать.
Вот мой репозиторий в абстрактном классе User:
@NoRepositoryBean
public interface UserRepository <T extends User> extends JpaRepository<T,
Long>{
<S extends T> S findByLoginName(String loginName);
}
Вот мой реальный репозиторий в реальном классе ConcreteUser:
@Repository
public interface ConcreteUserRepository extends UserRepository<ConcreteUser> {
}
В моей реализации класса обслуживания у меня есть вызов метода, который выглядит так:
ConcreteUser user = this.userRepository.findByLoginName(loginName);
Это, конечно, возвращает большое количество полей, поэтому я создал интерфейс, содержащий подмножество полей, которые я хочу назвать UserProfile. Имена полей точно такие же, как в ConcreteUser. Затем я добавил "реализует UserProfile" в класс User. Я не знаю, нужно ли это, но я пытаюсь заставить дженерики работать, чтобы сделать что-то вроде этого:
@NoRepositoryBean
public interface UserRepository <T extends User> extends JpaRepository<T,
Long>{
<S extends T> S findByLoginName(String loginName, Class<S> clazz);
}
а затем назовите это так:
ConcreteUser user = this.userRepository.findByLoginName(loginName, ConcreteUser.class);
UserProfile profile = this.userRepository.findByLoginName(loginName, UserProfile.class;
Я пробовал разные подходы к дженерикам. Я также пробовал использовать свой класс DTO UserProfileDTO вместо интерфейса UserProfile.
У меня проблемы с правильностью Generics из-за дополнительного уровня абстракции.