【发布时间】:2019-06-07 13:58:24
【问题描述】:
我的 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);
你可以看到它添加了@Query注解来实现我需要的功能。
两个接口都按预期独立工作,但是当存储库需要像这样的两个属性(授权和软删除)时
public interface FooRepo extends SoftDeleteRepository<Foo, Long>, MultiTenantCrudRepo<Foo, Long> {
似乎只有“扩展”之后的第一个接口的注释才有效。所以在这种情况下,我得到了一个支持软取消但没有授权验证的 FooRepo。
让两者发挥作用的最佳方式是什么?
【问题讨论】:
标签: java jpa spring-data-jpa