@MappedSuperclass ist nicht eine @Entity in JPA?
So, ich bin mit DerbyDB und ich bin einrichten einige Entitäten. Ich habe eine @MappedSuperclass
die als Superklasse für einige Entitäten (@Entity
). Genauer gesagt, ich habe eine Superklasse User
- und 3 Unterklassen nämlich admin
, regular
und guest
. Jetzt habe ich eine andere Entität, sagen wir mal file
das sollte Referenz (als eines seiner Felder) seinen Besitzer. So habe ich ein Feld namens User owner
.
Der Fehler den ich bekomme, ist:
Exception Description: [File] uses a non-entity [User] as target entity in the relationship attribute [field owner].
Gibt es eine Abhilfe?
Dein Fehler ist eindeutig spezifisch für welche JPA-Implementierung, die Sie verwenden (und Sie nicht sagen Sie uns was). Meine JPA-provider ermöglicht den Einsatz von MappedSuperclass in Beziehungen.
was JPA-provider ermöglicht den Einsatz von MappedSuperclass als eine Einheit? als der oracle-Dokumentation: "Gemappte Oberklassen abgefragt werden können, und kann nicht verwendet werden, in der EntityManager oder Query-Operationen."
DataNucleus JPA hat IIRC, und alle JPA-Anbieter können Ihre eigenen Erweiterungen auf die (begrenzten) JPA-Spezifikation (wie andere in anderen Bereichen).
thx für die info, ich arbeitete nur mit EclipseLink und Hibernate so weit, die don ' T ermöglichen ein MappedSuperclass ein entity
was JPA-provider ermöglicht den Einsatz von MappedSuperclass als eine Einheit? als der oracle-Dokumentation: "Gemappte Oberklassen abgefragt werden können, und kann nicht verwendet werden, in der EntityManager oder Query-Operationen."
DataNucleus JPA hat IIRC, und alle JPA-Anbieter können Ihre eigenen Erweiterungen auf die (begrenzten) JPA-Spezifikation (wie andere in anderen Bereichen).
thx für die info, ich arbeitete nur mit EclipseLink und Hibernate so weit, die don ' T ermöglichen ein MappedSuperclass ein entity
InformationsquelleAutor Rakim | 2016-05-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann ich schlage zwei Lösungen:
Ändern Vererbung
Ausnahme erhalten Sie klar Ihr problem beschreibt:
User
ist eine Entität. Jede Klasse deklariert als Unterklasse mit der Schnittstelle@MappedSuperclass
nicht eine Entität (in der standard-JPA - hängt von deinem JPA-provider)... lassen Sie mich verweisen Sie auf eine Antwort, die ich gab nur um ein ziemlich ähnliches problem--> Oberklasse-Typen
Also der Definition Ihrer übergeordneten Klasse als eine abstrakte Entität, geben Sie das gewünschte Verhalten beschrieben.
Extra:
Wenn Sie Ihre erbschaft-mapping-Strategie als
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
Sie brauchen auch nicht mehrere Datenbank-Tabellen. Hier ist ein gutes Beispiel: JPA Single-Table-InheritanceÄndern-Modell (vorgeschlagen)
Nicht teilen Sie Ihre Benutzer-Entität in mehrere Entitäten nur durch Ihre Rollen. Eine
Enum
mit all Ihren gewünschten Rollen und fügen Sie es als ein Feld, um IhreUser
-Einheit. Dies ist weit mehr gemeinsam, wenn u brauchen Ihre admin, Gäste, etc. zu einem eigenen Objekt...Ok, ich sehe. Wenn es gibt eine Menge verschiedene zusätzliche Attribute, von denen ich Ratschläge zu verwenden InheritanceType.TRAT. SINGLE_TABLE sonst wird Ergebnis in eine Menge von redundanten Daten (leere Spalten)... happy coding =)
InformationsquelleAutor XiCoN JFS
Als ich erklärte, in dieser Artikel,
@MappedSupperclass
ist anders als die@Inheritance
annotation.@MappedSuperclass
sagt der JPA-provider gehören der Basisklasse persistent Eigenschaften, als wenn Sie deklariert wurden, von der Kind-Klasse, die sich der Superklasse kommentiert mit@MappedSuperclass
.Die Vererbung wird jedoch nur sichtbar in der OOP-Welt, denn aus der Datenbank-Perspektive, es gibt keine Angabe der Basisklasse. Nur die untergeordnete Klasse entity wird eine zugehörige Tabelle zugeordnet.
Den
@Inheritance
Anmerkung gemeint ist, realisiert die OOP-Vererbung-Modell in die Datenbank-Tabelle Struktur. Mehr, können Sie die Abfrage einer Basisklasse kommentiert mit@Inheritance
aber Sie können nicht tun, dass für eine Basis-Klasse, versehen mit@MappedSuperclass
.InformationsquelleAutor Vlad Mihalcea