Spring 具有扩展接口和泛型的动态JPA投影

Spring 具有扩展接口和泛型的动态JPA投影,spring,generics,spring-data-jpa,spring-projections,Spring,Generics,Spring Data Jpa,Spring Projections,我希望使用SpringJPADynamicProjections来限制查询返回的字段数量。我使用的表很宽,但是投影仍然包含大约10个字段。因此,我尝试使用动态投影。问题似乎在于尝试在repository接口中指定方法,因为我首先有一个使用抽象类扩展JpaRepository的接口,然后有一个使用实际类扩展JpaRepository的接口 我尝试了各种方法来限制字段的数量,而这一种似乎是最接近我想要使用的 以下是我在抽象类用户上的存储库: @NoRepositoryBean public inte

我希望使用SpringJPADynamicProjections来限制查询返回的字段数量。我使用的表很宽,但是投影仍然包含大约10个字段。因此,我尝试使用动态投影。问题似乎在于尝试在repository接口中指定方法,因为我首先有一个使用抽象类扩展JpaRepository的接口,然后有一个使用实际类扩展JpaRepository的接口

我尝试了各种方法来限制字段的数量,而这一种似乎是最接近我想要使用的

以下是我在抽象类用户上的存储库:

@NoRepositoryBean
public interface UserRepository <T extends User> extends JpaRepository<T, 
Long>{

    <S extends T> S findByLoginName(String loginName);

}
这当然会返回大量字段,因此我创建了一个接口,其中包含我想要的名为UserProfile的字段子集。字段名与ConcreteUser中的字段名完全相同。然后,我将“implements UserProfile”添加到用户类中。我不知道这是否有必要,但我正在尝试让泛型工作,以便我可以这样做:

ConcreteUser user = this.userRepository.findByLoginName(loginName);
@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接口


由于额外的抽象级别,我在正确获取泛型方面遇到了问题。

AdminUser、ConcreteUser、UserProfile、User之间的区别/关系是什么?很难理解你想要实现的目标。另外,如何创建您的UserProfile实例?像UserProfile UserProfile=?我忽略了你的实际问题。是否选择了许多属性?还是有例外?或者它不编译?UserProfile是一个接口,包含完整用户对象中字段的子集。UserProfile是我想要用作JPA投影的内容。
ConcreteUser user = this.userRepository.findByLoginName(loginName, ConcreteUser.class);
UserProfile profile = this.userRepository.findByLoginName(loginName, UserProfile.class;