Ich benutze derzeit Eclipselink, aber ich weiß jetzt Tage die meisten JPA-Implementierungen wurden ziemlich standardisiert. Gibt es eine native Möglichkeit, eine JPA-Entität einer Ansicht zuzuordnen? Ich möchte nicht einfügen/update, aber die Frage ist wirklich, wie mit der @ Id Annotation umzugehen. Jede Entität in der JPA-Welt muss ein ID-Feld haben, aber viele der von mir erstellten Ansichten stimmen nicht damit überein. Gibt es native Unterstützung dafür in der JPA oder muss ich Hacks verwenden, um es zur Arbeit zu bringen? Ich habe viel gesucht und wenig Informationen darüber gefunden.Unterstützt JPA die Zuordnung zu SQL-Ansichten?
Antwort
Während der Verwendung der @Id
Annotation mit Feldern von direkt unterstützten Typen ist nicht die einzige Möglichkeit eines Unternehmens Identität angeben (siehe @IdClass
mit mehreren @Id
Anmerkungen oder @EmbeddedId
mit @Embedded
) erfordert die JPA-Spezifikation einen Primärschlüssel für jede Einheit.
Das besagt, dass Sie keine Entitäten benötigen, um JPA mit Datenbankansichten zu verwenden. Da sich die Zuordnung zu einer Ansicht nicht von der Zuordnung zu einer Tabelle aus einer SQL-Perspektive unterscheidet, können Sie weiterhin systemeigene Abfragen verwenden (createNativeQuery
on EntityManager
), um stattdessen skalare Werte abzurufen.
Ich habe mir das selbst angeschaut, und ich habe einen Hack gefunden, bei dem ich nicht hundertprozentig sicher bin, aber das sieht vielversprechend aus.
In meinem Fall habe ich eine FK-Spalte in der Ansicht, die effektiv als eine PK funktionieren kann - jede gegebene Instanz dieses fremden Objekts kann nur einmal in der Ansicht auftreten. Ich habe zwei Objekte von diesem einen Feld definiert: eines wird als ID bezeichnet und repräsentiert den Rohwert des Feldes, und das andere wird als schreibgeschützt bezeichnet und repräsentiert das Objekt, auf das Bezug genommen wird.
@Id
@Column(name = "foreignid", unique = true, nullable = false)
public Long getForeignId() {
...
@OneToOne
@JoinColumn(name = "foreignid", insertable=false, updatable=false)
public ForeignObject getForeignObject() {
...
Wie ich schon sagte, ich bin auf diese nicht 100% sicher (und ich werde nur diese Antwort löschen, wenn sie nicht zur Arbeit stellt sich heraus), aber es hat mein Code an einem bestimmten Punkt Absturz.
Weiß nicht, ob es für Ihre spezifische Situation gilt, obwohl. Und es gibt eine ausgezeichnete Chance, dass Sie nach 11 Monaten nicht mehr kümmern. :-) Was zum Teufel, das "Nekromanten" -Abzeichen verdient sich nicht nur ...
Aus meiner Sicht habe ich eine "eindeutige" ID, also habe ich sie als die Entity ID abgebildet. Es funktioniert sehr gut:
@Entity
@Table(name="table")
@NamedQuery(name="Table.findAll", query="SELECT n FROM Table n")
public class Table implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Column(name="column_a")
private int columnA;
- 1. JPA-Entity-Zuordnung zu spezifischer Tabelle
- 2. jpa Ruhezustand Composite-Fremdschlüssel Zuordnung
- 3. Jpa, Hibernate, Zuordnung einer Tabelle zu einer Klasse
- 4. Zuordnung einer SQL-Ansicht ohne Primärschlüssel zu JPA-Entität
- 5. JPA Viele-zu-Eins-Zuordnung duplizieren Erstellen auf Update
- 6. Spring Datenrest und JPA, Abfrage nach Zuordnung
- 7. Eins-zu-Viele-Zuordnung zwischen drei Entitäten in JPA
- 8. JPA - Links Join 2 Tabellen ohne Zuordnung
- 9. JPA-Map <String, String> Zuordnung
- 10. Welche JPA-Provider werden von Apache Aries Managed JPA unterstützt?
- 11. 'str' Objekt unterstützt keine Artikel Zuordnung (Python)
- 12. Ist @ManyToMany (mappedBy = ...) + @OrderColumn von der JPA unterstützt?
- 13. XML-zu-SQL-Zuordnung
- 14. Zuordnung zu Keine
- 15. Typeerror: ‚Tensor‘ Objekt nicht Gegenstand Zuordnung in TensorFlow unterstützt
- 16. NHibernate Zuordnung zu System.Drawing.Color
- 17. BizTalk-Zuordnung zu Excel
- 18. Wie zu verbieten Zuordnung
- 19. Zuordnung zu XML-Datenbanktabelle
- 20. Zuordnung zu einem Positionsparameter
- 21. Lesen und Schreiben von Blobs durch Zuordnung zu Binärdaten
- 22. Spring Daten jpa unterstützt PagingandSorting auf MySQL-Ansichten?
- 23. Nicht unterstützt für DML-Operationen mit JPA-Update-Abfrage
- 24. Zuordnung zu SerializableType in fließendem NHibernate
- 25. JPA zu WebServices erweitern
- 26. Zuordnung Priorität zu den Aufgaben
- 27. Zuordnung von DiskDrive zu Speichercontrollern
- 28. Zuordnung von Zellen zu Arrays
- 29. NHibernate-Viele-zu-Viele-Zuordnung
- 30. Swift Tuple zu Optionale Zuordnung
Ansichten Funktionen wie normale Tabellen, aber wenn Sie den Blick nicht gut mit JPA ORM-Mapping paßt Sie stattdessen eine gespeicherte Prozedur verwendet möglicherweise einen benutzerdefinierten Cursor aus der Sicht (en) gebildet zurückzukehren. Sie können gespeicherte Prozeduren in EclipseLink mithilfe der @ NamedStoredProcedureQuery-Annotation zuordnen. Weitere Informationen zu Google finden Sie unter "EclipseLink-Erweiterungen". –