0

独自のクエリ API/構文を追加するために、すべてのリポジトリ (JPA モジュール) にカスタム動作を追加しています。実行時に変更できるように、コードを外部化する必要があります (現在、これらはカスタム アノテーションとしてドメイン クラスに追加されています)。

例:

  • 動的な役割/列セキュリティ マトリックスを設定することによるデータ セキュリティ (役割 A はアクセスできます。つまり、行のサブセットのみにフィルターを追加できます。役割 B には、いくつかの機密属性がマスクされています...)

  • 有効化/無効化された機能により、本番環境へのコードのプリロード/限定的なロールアウトが可能になります。

  • スキーマ名のオーバーライド (さまざまなテスト作業のためにコードが異なるターゲット サンドボックス テーブルを指すようにする)

私の Repository Impl クラスでは、この構成を読み取ってここに属性として保存することができましたが、Spring Data ドメイン クラスのメタデータを拡張する方が理にかなっている (サポートされている場合) かどうか疑問に思っていました (これは RepositoryMetadata クラスであると考えてください)。

ありがとうマーク

4

1 に答える 1

0

見たいクラスとメソッドがいくつかあると思います。

  • RepositoryFactorySupport.getRepositoryInformation(…)リポジトリのメタデータにフックする場合。
  • JpaRepositoryFactory.getEntityInformation(…)エンティティ メタデータにフックする場合。これは、リポジトリの実装が処理するために渡されるものです。

私は後者があなたにとって最も興味深いと思います。たとえば、MongoDB モジュールはそれをカスタマイズして、@Documentアノテーションの属性のSpring Expression 言語collectionNameがコレクションを動的に計算し、各ストア インタラクションで相互作用できるようにします。

Spring Data の実際の制御下ではなく、永続化プロバイダーによって評価されるものを変更したいと思われるため、これが JPA でどれほどうまく機能するかはわかりません。たとえば、おそらく定義に取り組みたいスキーマを切り替えるにはDataSource、さまざまなテーブルマッピング、永続化プロバイダーレベルでカスタマイズする必要があります。

于 2014-12-09T09:34:36.407 に答える