Я настраиваю кэширование Hibernate и хочу кэшировать определенные объекты в разных регионах. Например, некоторые сущности могут быть «устаревшими» до 5 минут, некоторые — в течение часа, а некоторые (например, поисковые запросы) не будут меняться в течение нескольких недель. Чтобы упростить настройку регионов в моем коде, я пытаюсь сделать следующее:
Я создал аннотацию с именем @LookupCache (и @DailyCache и т. д.)
@Cache(region = "lookups", usage = CacheConcurrencyStrategy.READ_ONLY)
@Retention(RetentionPolicy.RUNTIME)
public @interface LookupCache {}
И я добавляю эту аннотацию к своему объекту Hibernate/JPA:
@LookupCache
public class Course {}
Таким образом, я могу легко изменить область или атрибуты @LookupCache без необходимости изменять параметры аннотации каждого класса.
Однако загрузчик кеша не принимает эту унаследованную нотацию @Cache. Как сделать так, чтобы аннотация @LookupCache наследовала примененные к ней аннотации?
Обновление: чтобы уточнить, аннотация @Cache — это встроенная аннотация гибернации, используемая кэшами второго уровня, такими как EHCache. Я не могу изменить аннотацию @Cache, чтобы сделать ее наследуемой другими аннотациями (мой клиент не хочет поддерживать специальную вилку спящего режима). Хотя это, пожалуй, единственный мой вариант.