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> {
}
そのメソッドの実装では、JPA クエリを作成できるように、指定された型引数search
を知る必要があります。すべてのリポジトリを検索可能にしたくないため、すべてのリポジトリにカスタム動作を追加したくありません。インターフェイスを適用してリポジトリを選択したいだけです。Class<T>
T
SearchableRepository
では、どうすればこれを行うことができますか?それともできますか?