Как использовать / консультировать репозиторий Spring Data (JPA)?

Я терплю неудачу в своих усилиях по консультированию весеннего хранилища данных jpa. Цель состоит в том, чтобыvoid открытые методы в определенном репозитории, аннотированные пользовательской аннотацией (ResourceNotFound в этом примере), и выдают исключение, когда возвращаемое значение либоnull или пустая коллекция.

@Repository 
@ResourceNotFound
@Transactional(readOnly = true)
public interface CityRepository extends JpaRepository<City, Long>, JpaSpecificationExecutor<City> { … }

Следующий совет состоит в том, чтобы связать все открытые методы реализаций интерфейса с аннотацией@ResourceNotFound.

@Pointcut("within(com.digitalmisfits.spring.aop.annotation.ResourceNotFound *)")
public void beanAnnotatedWithResourceNotFound() {}

@Pointcut("execution(public * *(..))")
public void publicMethod() {}

@Around("beanAnnotatedWithResourceNotFound() && publicMethod()")
public Object publicMethodInsideAClassMarkedWithResourceNotFound(ProceedingJoinPoint pjp) throws Throwable {

    System.out.println("publicMethodInsideAClassMarkedWithResourceNotFound " + pjp.getTarget().toString());;

    Object retVal =  pjp.proceed();

    if(((MethodSignature) pjp.getSignature()).getReturnType() != Void.TYPE && isObjectEmpty(retVal))
        throw new RuntimeException("isObjectEmpty == true");

    return retVal;
}

publicMethodInsideAClassMarkedWithResourceNotFound(…) Метод работает, когда pointcut задан как:

@Pointcut("execution(public * package.CityRepository+.*(..))")

Тем не менее@ResourceNotFound аннотация не подбирается. Это может быть связано с тем, что базовый класс интерфейса репозитория является (прокси)SimpleJpaRepository который не имеет этой конкретной аннотации.

Есть ли способ распространения @ResourceNotFound для реализации?

-- Обновить --

Изменен вопрос, чтобы отразить тот факт, что рекомендации (около) должны применяться только к репозиториям с пользовательской аннотацией.

Ответы на вопрос(5)

Ваш ответ на вопрос