Лучший способ добавления аннотаций к унаследованным методам

У меня есть ряд абстрактных суперклассов, из которых мой конкретный класс наследует различные методы. Некоторые из этих методов должны содержать аннотации JPA или JAXB, размещенные на них в конкретном классе. В настоящее время я делаю это через следующее:

@MyLocalAnnotations
@Override
public method inheritedMethodHere (yadda yadda)
  {
  super.inheritedMethodHere(yadda yadda);
  }

Есть ли способ сделать это без переопределения метода? Кажется, что такая отброса переопределяет метод только для подачи локальных аннотаций.

Ответы

Ответ 1

К сожалению, нет лучшего способа, чем то, что вы сейчас делаете. Чтобы сделать то, что вы описываете, вам придется переопределить метод, учитывая, что ваша аннотация JPA потребует информации, специфичной для конкретного класса.

С аннотациями JPA у вас есть два варианта: вы можете аннотировать методы или аннотировать свойства. В нашем проекте мы стандартизировали аннотирующие свойства, а не методы, но это тоже не поможет, поскольку свойства предположительно являются частью конкретного класса. (Если они каким-то образом делятся в суперклассе, тогда вам ДЕЙСТВИТЕЛЬНО нужно будет аннотировать методы и переопределить их).

Сложно сделать рекомендацию, не видя вашу схему, но если у ваших классов сущностей есть так много общего, что у них есть много свойств в суперклассе - возможно, они просто будут храниться в одной таблице, возможно, с дифференцированием тип столбца?

Или, если они не идентичны, можете ли вы просто воспроизвести общие свойства в каждом конкретном классе? Вы могли бы заставить себя больше работать, а не спасать себя, пытаясь захватить общие свойства в суперклассе. Поскольку вам придется составлять их отдельно в конкретных классах, просто объявите их в конкретных классах. Если вам нужны общие методы, которые взаимодействуют с этими свойствами, отдельным ответом может быть отдельный класс Utility для захвата этих функций.

В нашем проекте мы иногда используем общий суперкласс для сущностей, но он захватывает некоторые метаданные об объекте - ничего, что могло бы повлиять на логику сохранения. Поэтому никакие аннотации JPA не нужны (и не имеют смысла) в абстрактном классе.