Лучший способ добавить аннотации к унаследованным методам - PullRequest
14 голосов
/ 03 февраля 2010

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

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

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

1 Ответ

9 голосов
/ 04 февраля 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...