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