Spring Data JPA-Vererbung-repositories
Ich habe eine abstrakte Klasse, versehen mit @MappedSuperClass
. Es gibt rund 15 Personen, die Sie erweitern diese abstrakte Klasse (mit 15 entsprechenden Tabellen in der Datenbank). Die 15 Entitäten haben die gleichen Merkmale, die vererbt werden, die von der abstrakten super-Klasse.
Habe ich einen repository wie unten für die abstrakte Klasse:
@NoRepositoryBean
public interface AbstractRepository <T extends AbstractClass, E extends Serializable>
extends PagingAndSortingRepository<T, Serializable> {
.....some methods here
}
Den 15-Entitäten/Tabellen speichern einige Daten (Daten über 15 verschiedene Geräte). Basierend auf der Ausrüstung ausgewählt, die Daten aus dieser Tabelle abgerufen werden sollen. Ich habe mit 15 separaten repositories für die 15 konkrete Entitäten oder gibt es eine Möglichkeit, um die spezielle Einheit für die Ausrüstung ausgewählt, die nur mit dem abstrakten repository? Wenn Repositorys erstellt werden müssen für jede konkrete Person, wie man an das richtige repository für die spezifische Ausrüstung nennen? (speichern Sie die Tabelle name und repository-Klasse in einer Karte, die erzeugt wird, beim Start der Anwendung vielleicht?)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie den repository für jede Klasse. Allerdings können Sie Ihre Methoden in den abstrakten. Sie müssen
@Query
auf die einzelnen Methoden und verwenden SpeL(Spring Expression Language) hinzufügen, die Art der Abfragen.Dann verlängern wie die folgenden
@Autowire
eine Karte, wo der Schlüssel ist die Art und der Wert der repository-Typ.Idealerweise die folgende Konfiguration sollte funktionieren:
Ich habe ein Beispielprojekt auf Github um das zu demonstrieren, in Aktion. Läuft Maven tests in einer der folgenden zeigen wird, die Prüfungen zu zeigen, dass das set-up funktioniert wie erwartet.
Sagte, diese Einrichtung funktioniert möglicherweise nicht mit Hibernate, das ist, was ich vermute, Sie verwenden. Hibernate unterstützt keine auto-increment id-Spalten mit
TABLE_PER_CLASS
Vererbung. Daher versucht, das set-up oben mit Hibernate wird eine exception werfen. Dies kann überprüft werden, durch ausführen des folgenden auf das Beispiel weiter oben verlinkt.