Ist es möglich, zwei verschiedene Repositorys für dieselbe JPA-Entität mit Spring Data Rest zu veröffentlichen? Ich gab den zwei Repositories verschiedene Pfade und Rel-Namen, aber nur einer der beiden ist als REST-Endpunkt verfügbar. Der Punkt, warum ich zwei Repositories habe, ist, dass einer von ihnen ein Auszug ist, der nur die grundlegenden Felder einer Entität zeigt.Mehrere Repositorys für dieselbe Entität im Frühjahr Datenrest
Antwort
Die Antwort scheint zu sein: Es ist nur ein Repository pro Entität möglich.
Der schreckliche Teil ist nicht nur, dass Sie nur 1 Federdaten Rest Repository (@RepositoryRestResource) pro Entity haben kann, aber auch, dass, wenn Sie eine regelmäßige JPA @Repository (wie CrudRepository oder PagingAndSorting) haben es auch mit interagieren die Federdaten liegen bei eins (da der Schlüssel in der Karte die Entität selbst ist). Verloren ziemlich viele Stunden, die zufällige Last des einen oder des anderen debuggen. Ich denke, wenn dies eine harte Einschränkung der Federdaten ist, kann zumindest eine Ausnahme ausgelöst werden, wenn der Schlüssel der Karte bereits vorhanden ist, wenn versucht wird, den Wert zu überschreiben.
Ich habe eine Jira-Ausgabe für dieses erstellt: https://jira.spring.io/browse/DATAREST-923 fühlen Sie sich frei, es abzustimmen! – Tim
Was wäre ein guter Usecase, so dass Sie zwei Repositories benötigen? – Tim
Beispiel Use Case: Speichern in JPA + Verwenden Elasticsearch Repo für die Suche – aux
Also, dies beantwortet nicht direkt die Frage, kann aber helfen, das zugrunde liegende Problem zu lösen.
Sie können nur ein Repository pro Entität haben ... Sie können jedoch mehrere Entitäten pro Tabelle haben; Somit haben Sie mehrere Repositories pro Tabelle.
In einem Stück Code ich geschrieben habe, hatte ich zwei Einheiten ... mit einem automatisch generierten ID und eine andere mit einem voreingestellten ID zu erstellen, aber auf dem gleichen Tisch beide zeigen:
@Entity
@Table("line_item")
public class LineItemWithAutoId {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
private String id;
...
}
@Entity
@Table("line_item")
public class LineItemWithPredefinedId {
@Id
private String id;
...
}
Dann hatte ich ein Repository für jeden:
public interface LineItemWithoutId extends Repository<LineItemWithAutoId,String> {
...
}
public interface LineItemWithId extends Repository<LineItemWithPredefinedId,String> {
...
}
Für das veröffentlichte Problem könnten Sie zwei Entitäten haben. Einer wäre die vollständige Einheit, mit Gettern und Setter für alles. Die andere wäre die Entität, wo es für alles Setter gibt, aber nur Getter für die Felder, die Sie veröffentlichen möchten. Macht das Sinn?
- 1. Anpassen der Abfrage für Paging und Sortieren im Frühjahr Datenrest
- 2. @NamedQuery überschreiben findAll im Frühjahr Datenrest JpaRepository
- 3. So deaktivieren Sie das Paging für JpaRepository im Frühjahr-Datenrest
- 4. Deaktivieren Sie optional HATEOAS-Format im Frühjahr Datenrest
- 5. mit Validatoren im Frühjahr-Datenrest gibt http 500 statt 400
- 6. Mehrere antMatchers im Frühjahr Sicherheit
- 7. Mehrere Bean Instanzen im Frühjahr
- 8. Mehrere @PathVariable im Frühjahr MVC
- 9. Mehrere conversionServices im Frühjahr-Boot-
- 10. mehrere @ComponentScan im Frühjahr 4?
- 11. Mehrere DataSources mit mehreren Transaktionsmanagern im Frühjahr
- 12. Wie man mehrere Fehlerseiten für verschiedene Ausnahmen im Frühjahr behandelt
- 13. Mehrere Ansicht Resolvern im Frühjahr mvc
- 14. Handle mehrere Zeilen im Frühjahr Batch
- 15. Mehrere Datenquellen im Frühjahr dynamisch initialisieren
- 16. Mehrere SessionFactory im Frühjahr mit Hibernate
- 17. Wie mehrere Tabellen im Frühjahr CassandraRepository
- 18. Über mehrere Container im Frühjahr Framework
- 19. Entwerfen eines Punktsystems im Frühjahr
- 20. Binding Annotation im Frühjahr
- 21. Feder Datenrest ManytoMany POST
- 22. Objektdateien Konflikt im Frühjahr
- 23. Frühjahr mehrere Transaktionsmanager Ausgabe
- 24. Multithread-JMS-Empfang im Frühjahr
- 25. Gleiche Instanz mit zwei IDs im Frühjahr
- 26. Listener für Session Expiration im Frühjahr
- 27. Verwenden Verschiedene Locale für @NumberFormat im Frühjahr
- 28. Controller im Frühjahr für die Formularverarbeitung
- 29. ClasspathXMLApplicationContext im Frühjahr arbeiten
- 30. ETag Unterstützung im Frühling für versionierte Entität
Dies ist nicht möglich. Mit Spring Data REST ist eine verwaltete Ressource eine Entität, kein Repository. Die Bibliothek verwaltet eine "Map" von verwalteten Ressourcen, wobei der Schlüssel die Entitätsklasse ist. Daher kann die Entität immer nur einer Repository-Schnittstelle zugeordnet werden (da eine Map nur einen Wert für einen Schlüssel enthalten kann). Wenn es für Ihre Anwendung von entscheidender Bedeutung ist, dass mehrere Repositorys pro Entitätsklasse vorhanden sind, sollten Sie eine Verbesserungsanfrage beim Spring Data-Team stellen. – manish
Es gibt MultiMaps. Technisch gibt es sicher keine Hürde. Aus einer semantischen Sicht kann in unseren Anwendungsfällen eine Ressource nicht mit einer Entität, sondern mit einer Sicht im Sinne einer DB identifiziert werden. Ansichten entsprechen Projektionen im Frühjahr Datenrest. Es wäre also großartig, wenn ich Projektionen und Operationen auf Ressourcen abbilden könnte. – Gregor
Mein Kommentar basierte auf der [tatsächlichen Spring Data REST-Implementierung] (https://github.com/spring-projects/spring-data-rest/blob/master/spring-data-rest-core/src/main/java /org/springframework/data/rest/core/config/ResourceMappingConfiguration.java). Ich weiß, dass es Strukturen wie "MultiMap" gibt, weshalb ich vorgeschlagen habe, dass Sie erwägen, eine Verbesserungsanfrage mit dem Spring Data-Team zu stellen. – manish