根据 Spring Data Commons文档,将自定义方法实现添加到 Spring Data 存储库非常简单:
interface UserRepositoryCustom {
public void someCustomMethod(User user);
}
class UserRepositoryCustomImpl implements UserRepositoryCustom {
public void someCustomMethod(User user) {
// Your custom implementation
}
}
public interface UserRepository extends JpaRepository<User, Long>,
UserRepositoryCustom {
}
但是,我想不通的是,如果你想使用类型参数怎么办?例如:
interface SearchableRepository<T> {
public Page<T> search(String query, Pageable page);
}
class SearchableRepositoryImpl<T> implements SearchableRepository<T> {
public Page<T> search(String query, Pageable page) {
// Right here, I need the Class<T> of T so that I can create
// the JPA query
}
}
public interface UserRepository extends JpaRepository<User, Long>,
SearchableRepository<User> {
}
public interface NewsRepository extends JpaRepository<Article, Long>,
SearchableRepository<Article> {
}
在该search
方法的实现中,我需要知道Class<T>
提供的类型参数的类型T
,以便创建 JPA 查询。我不想向所有存储库添加自定义行为,因为我不希望所有存储库都可搜索。我只想将SearchableRepository
界面应用于选择存储库。
那么你怎么能做到这一点呢?或者你能做到吗?