Мои репозитории JPA расширяют пользовательский интерфейс, который содержит аннотации для обработки авторизации общим способом.
public interface MultiTenantCrudRepo<T, ID> extends CrudRepository<T, ID>
Этот интерфейс добавляет аннотации @PreAuthorize, @PostAuthorize, @PreFilter и @PostFilter к методам CrudRepository.
Кроме того, для некоторых объектов мне необходимо реализовать мягкое удаление. Для этой цели я создал «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);
Вы можете видеть, что он добавляет аннотации @Query для реализации необходимых мне функций.
Оба интерфейса работают независимо, как и ожидалось, но когда для репозитория требуются оба атрибута (авторизация и мягкое удаление), как это
public interface FooRepo extends SoftDeleteRepository<Foo, Long>, MultiTenantCrudRepo<Foo, Long> {
похоже, что действуют только аннотации первого интерфейса после "extends". Поэтому в этом случае я получаю FooRepo, который поддерживает мягкое отклонение, но без проверки авторизации.
Как лучше всего заставить обоих работать?