JpaRepository <User>を直接注入する

SexyMF:

定義されたすべてのメソッドへのすべてのリクエストをインターセプトする方法を探しています。

(定義済み= JpaRepositoryインターフェース上にあるものすべて)。

したがって、たとえば誰かがrepo.findAll()を呼び出すと、前後に汎用コードを実行できるようになります。

(総称=すべてのエンティティの同じコード)。

つまり、私が行ったのは、ジェネリッククラスを作成してJpaRepositoryにメソッドを実装し、すべてのリクエストをインターセプトすることです。

@Repository
public class BaseJpaRepository<T> implements JpaRepository<T, Long> {

    @Autowired
    private JpaRepository<T, Long> repository;

    @Override
    public List<T> findAll() {
        //run some code here
        List<T> res = repository.findAll();
        //run some code here
        return res;
    }
    // all other methods here...
}

これはサービスに注入するインターフェースです:

@Repository
public interface UserRepository extends JpaRepository<UserEntity, Long> {

}

これは豆です

@Repository
public class UserRepositoryBean extends  BaseJpaRepository<User> implements JpaRepository<User, Long> {

}

問題はprivate JpaRepository<T, Long> repository;注入さていないことです。これは、Springがブートストラップ時間にEntityタイプを必要とするためと考えられます。

また、明示的な型をコンストラクターに注入し、UserRepositoryBeanそれを親に渡そうとしました。しかし、それは不満です。

@Repository
public class UserRepositoryBean extends  BaseJpaRepository<User> implements JpaRepository<User, Long> {

public UserRepositoryBean(JpaRepositry<User, Long> repo){super(repo);}

}

すべてのSpring jpaメソッドをインターセプトする方法はありますか?

ありがとう

ニコライ・シェフチェンコ:

最初に、すべてのカスタムリポジトリが継承される基本的なインターフェイスを定義します

@NoRepositoryBean
interface BaseJpaRepository<T, ID> extends JpaRepository<T, ID> {
     // You can also declare any generic methods here, 
     // and override (intercept) them in BaseJpaRepositoryImpl as well
}

そしてそれも実装です

@NoRepositoryBean
class BaseJpaRepositoryImpl<T, ID>
        extends SimpleJpaRepository<T, ID>
        implements BaseJpaRepository<T, ID> {

    public BaseJpaRepositoryImpl(JpaEntityInformation<T, ID> entityInformation, EntityManager em) {
        super(entityInformation, em);
    }

    // One of 'defined' methods inherited from SimpleJpaRepository (and in turn from JpaRepository)
    @Override
    public List<T> findAll() {
        //run some code here
        List<T> res = super.findAll();
        //run some code here
        return res;
    }

    // other 'defined' methods to intercept ...
}

カスタムリポジトリは通常どおりに表示されますがBaseJpaRepository、Springのインターフェイスではなくインターフェイスから派生している点が異なります。JpaRepository

@Repository
interface UserRepository extends BaseJpaRepository<User, Long> {
}

すべてを機能させるために、通常はいくつかの@Configurationクラスまたは@SpringBootApplication-edクラスに配置される次のアノテーションを変更してみましょう

@EnableJpaRepositories(
        basePackages = {"org.example.repositories"},
        repositoryBaseClass = BaseJpaRepositoryImpl.class
)

PS別の実行可能なアプローチは、Spring AOPを使用することです。ここで同様の質問をチェックすることもできます

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

JpaRepositoryで@EmbeddedIdを使用する

分類Dev

JpaRepositoryを保護する方法

分類Dev

spock で @Autowired JpaRepository をテストする

分類Dev

JpaRepositoryのBeanを作成する方法

分類Dev

どのように注入JpaRepositoryの実装

分類Dev

JpaRepositoryでキャッシュする

分類Dev

JpaRepositoryを使用したDBの更新と削除

分類Dev

JpaRepositoryを使用した動的クエリ

分類Dev

JpaRepositoryを使用した動的クエリ

分類Dev

JpaRepository:NoSuchBeanDefinitionException

分類Dev

nullを返す代わりにEntityNotFoundExceptionをスローするJpaRepository

分類Dev

オブジェクトをあるJpaRepositoryから別のJpaRepositoryに変換する方法

分類Dev

JavaでJpaRepositoryを使用して新しい行を挿入する

分類Dev

JPARepositoryを使用してエンティティを保存する

分類Dev

(Spring / JpaRepository)動的@ Query、JpaRepositoryのメソッドをBaseEntityRepositoryからSubEntityRepositoryに継承する場合

分類Dev

JpaRepositoryでsaveAllをフラッシュする

分類Dev

JpaRepositoryを使用して効率的に更新する方法

分類Dev

JpaRepositoryで昇順降順を使用する方法

分類Dev

deleteByとremoveByのJpaRepositoryの違いを使用する

分類Dev

KotlinのJpaRepositoryからsave()を使用する方法

分類Dev

SpringはJpaRepositoryを見つけることができません

分類Dev

@Repository必要はありませんJpaRepositoryを実装しますか?

分類Dev

Spring Data JpaRepositoryから@idフィールドを返す

分類Dev

Spring Data JpaRepository "JOIN FETCH"が重複を返す

分類Dev

JpaRepository findByFieldEqualsは大文字小文字を無視します

分類Dev

JpaRepository findAllが空のリストを返す

分類Dev

クエリを記述せずにJpaRepositoryを使用する内部結合

分類Dev

JpaRepositoryを実装するためのベストプラクティス

分類Dev

JpaRepositoryは、エンティティを更新しません

Related 関連記事

  1. 1

    JpaRepositoryで@EmbeddedIdを使用する

  2. 2

    JpaRepositoryを保護する方法

  3. 3

    spock で @Autowired JpaRepository をテストする

  4. 4

    JpaRepositoryのBeanを作成する方法

  5. 5

    どのように注入JpaRepositoryの実装

  6. 6

    JpaRepositoryでキャッシュする

  7. 7

    JpaRepositoryを使用したDBの更新と削除

  8. 8

    JpaRepositoryを使用した動的クエリ

  9. 9

    JpaRepositoryを使用した動的クエリ

  10. 10

    JpaRepository:NoSuchBeanDefinitionException

  11. 11

    nullを返す代わりにEntityNotFoundExceptionをスローするJpaRepository

  12. 12

    オブジェクトをあるJpaRepositoryから別のJpaRepositoryに変換する方法

  13. 13

    JavaでJpaRepositoryを使用して新しい行を挿入する

  14. 14

    JPARepositoryを使用してエンティティを保存する

  15. 15

    (Spring / JpaRepository)動的@ Query、JpaRepositoryのメソッドをBaseEntityRepositoryからSubEntityRepositoryに継承する場合

  16. 16

    JpaRepositoryでsaveAllをフラッシュする

  17. 17

    JpaRepositoryを使用して効率的に更新する方法

  18. 18

    JpaRepositoryで昇順降順を使用する方法

  19. 19

    deleteByとremoveByのJpaRepositoryの違いを使用する

  20. 20

    KotlinのJpaRepositoryからsave()を使用する方法

  21. 21

    SpringはJpaRepositoryを見つけることができません

  22. 22

    @Repository必要はありませんJpaRepositoryを実装しますか?

  23. 23

    Spring Data JpaRepositoryから@idフィールドを返す

  24. 24

    Spring Data JpaRepository "JOIN FETCH"が重複を返す

  25. 25

    JpaRepository findByFieldEqualsは大文字小文字を無視します

  26. 26

    JpaRepository findAllが空のリストを返す

  27. 27

    クエリを記述せずにJpaRepositoryを使用する内部結合

  28. 28

    JpaRepositoryを実装するためのベストプラクティス

  29. 29

    JpaRepositoryは、エンティティを更新しません

ホットタグ

アーカイブ