JPAリポジトリ継承 - 複数のインタフェースを拡張します

user3235738:

私のJPAリポジトリは一般的な方法で承認を処理するための注釈を運ぶカスタムインターフェイスを拡張します。

public interface MultiTenantCrudRepo<T, ID> extends CrudRepository<T, ID>

このインタフェースは、CrudRepositoryの方法に@PreAuthorize、@PostAuthorize、@PreFilterと@PostFilter注釈を追加します。

さらに、いくつかのエンティティのために、私は、ソフトの削除を実装する必要があります。この目的のために、私はこのような「SoftDeleteRepository」を作成しました:

public interface SoftDeleteRepository<T extends BaseEntity<I> & SoftDeletable, I extends Serializable> extends CrudRepository<T, I> {

    @Query("update #{#entityName} e set e.isDeleted = true where e.id = ?#{#entity.id}")
    @Modifying
    @Override
    public void delete(@Param("entity") T entity);

あなたはそれが機能Iの必要性を実装するために@query注釈を追加します見ることができます。

両方のインターフェイスは、独立して、期待どおりに動作するが、リポジトリは、このように両方の属性(許可及びソフト欠失)を必要に応じて

public interface FooRepo extends SoftDeleteRepository<Foo, Long>, MultiTenantCrudRepo<Foo, Long> {

それは、「拡張」の後の最初のインターフェースの注釈だけのように思える効果的です。したがって、この場合には、私はソフトdelectionをサポートしていますが、認証の検証なしFooRepoを取得します。

仕事の両方を取得するための最良の方法は何ですか?

ピルヨ:

実際にJavaがサポートされていないマルチ相続の事になるのでご覧例えば、行うには難しいことだと推測これを

異なるパラメータで同じ注釈の2は、例えば、があった場合、何が選ばれるのでしょうか?

多くのフレームワーク - 春データ等 - 注釈の継承をチェックするときだけで罰金を行いますが、何のマルチ継承が存在しない場合にのみ、および/または同じ注釈と思います。これらのフレームワークは、「実装の木」上に行くためにリフレクションを使用する場合がありますが、上またはための唯一の道を選ぶ可能性があるだけでなく、例外をスロー実装されている場合。

これで私は怖いので、あなたは次のように何かをする必要があります。

public interface SoftDeleteMultitenantRepository
                     extends MultiTenantCrudRepo<Foo, Long> {
 // a copy of your soft delete method here
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=191952&siteId=1