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

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

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

Существует ли способ сделать это, не переопределяя метод? На пустую трату походит переопределять метод только для предоставления локальных аннотаций.

14
задан Plain Coder 27 June 2017 в 15:49
поделиться

1 ответ

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

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

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

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

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

9
ответ дан 1 December 2019 в 15:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: