Динамические проекции 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 из-за дополнительного уровня абстракции.

0 ответов

Другие вопросы по тегам