Leider gibt es keinen besseren Weg als das, was Sie jetzt tun. Um das zu tun, was Sie beschreiben, müssen Sie die Methode überschreiben, wenn Sie berücksichtigen, dass Ihre JPA-Annotation spezifische Informationen für die konkrete Klasse benötigt.
Mit JPA-Anmerkungen haben Sie tatsächlich zwei Optionen - Sie können die Methoden mit Anmerkungen versehen oder die Eigenschaften mit Anmerkungen versehen. In unserem Projekt haben wir die Annotation von Eigenschaften und nicht von Methoden standardisiert, aber dies wird Ihnen auch nicht weiterhelfen, da die Eigenschaften vermutlich Teil der konkreten Klasse sind. (Wenn sie in der Superklasse irgendwie geteilt werden, dann müssen Sie WIRKLICH die Methoden kommentieren und sie überschreiben).
Es ist schwer, eine Empfehlung abzugeben, ohne Ihr Schema zu sehen, aber wenn Ihre Entity-Klassen so viele Gemeinsamkeiten haben, dass sie viele Eigenschaften in der Super-Klasse teilen - könnten sie einfach in derselben Tabelle gespeichert werden, vielleicht mit a differenzierende Spalte?
Oder alternativ, wenn sie nicht fast identisch sind, könnten Sie nur die gemeinsamen Eigenschaften in jeder konkreten Klasse reproduzieren? Sie können sich mehr Arbeit ersparen als sich selbst zu retten, indem Sie versuchen, die allgemeinen Eigenschaften in der Superklasse zu erfassen. Da Sie sie in den konkreten Klassen einzeln annotieren müssen, deklarieren Sie sie einfach in den konkreten Klassen. Wenn Sie allgemeine Methoden benötigen, die mit diesen Eigenschaften interagieren, könnte eine separate Dienstprogrammklasse zur Erfassung dieser Funktionen die Antwort sein.
In unserem Projekt verwenden wir manchmal eine gemeinsame Superklasse für Entitäten, aber es erfasst einige Metadaten über die Entität - nichts, was die Persistenzlogik beeinflussen würde. Daher werden keine JPA-Annotationen in der abstrakten Klasse benötigt (noch würden sie einen Sinn ergeben).
Ich wollte auch hinzufügen, dass der Grund, warum ich Anmerkungen in den konkreten Unterklassen an erster Stelle erstellen musste, war, weil sie unterschiedliche Tabellennamen in JPA und Elementnamen in JAXB verwenden. Die Oberklasse ist in diesem Fall auch generisch. – HDave