我知道这个问题经常被问到,但我找不到解决方案。 如何在 Spring 注入(inject)存储库中获取通用类型类名?
这是我的基础仓库
public interface UserRepository extends JpaRepository<User, Long>, IUserRepository<User>{
User findByUsername(String username);
}
这是界面
public interface IUserRepository<T> {
public List<T> findAllValidEtSiteAndStructure();
}
最后是实现
public class UserRepositoryImpl<T> implements IUserRepository<T> {
@PersistenceContext
private EntityManager em;
private Class< T > type;
@Override
public List<T> findAllValidEtSiteAndStructure() {
final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication instanceof UserAuthentication) {
final User currentUser = ((UserAuthentication) authentication).getDetails();
return (List<T>) em.createQuery("FROM " + type.getName()+ " WHERE site=:site AND structure=:structure AND valid=:valid")
.setParameter("site", currentUser.getInstallation().getSite())
.setParameter("structure", currentUser.getInstallation().getStructure())
.setParameter("valid", true)
.getResultList();
}
return null;
}
}
我怎样才能得到type.name? 提前致谢
最佳答案
考虑到您使用的是 Spring Framework,请使用下面的代码片段,我已经测试过它工作正常:
ResolvableType resolvableType = ResolvableType.forClass(UserRepository.class).as(JpaRepository.class);
System.out.println(resolvableType.getGeneric(0));//User
System.out.println(resolvableType.getGeneric(1));//Long
关于java - Spring获取泛型类型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30202375/