2017-05-24 1 views
0

Ich habe drei Einheiten mit JPA/Eclipselink:Eclipse verwendet falsche Tabellennamen in Abfragen für Subklassen wenn Vererbungstyp SingleTable ist

@Entity(name = "Sharing") 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
public class AbstractSharingEntity extends AbstractEntity { 

@Entity(name = "InternalSharing") 
public class InternalSharingEntity extends AbstractSharingEntity { 

@Entity(name = "ExternalSharing") 
public class ExternalSharingEntity extends AbstractSharingEntity { 

Wenn ich eine typisierte Abfrage für AbstractSharingEntity (“... von der gemeinsamen Nutzung erstellen .. . ") Erstellt EclipseLink die korrekte Abfrage unter Verwendung des angegebenen Entitätsnamens.

Wenn ich jedoch eine typisierte Abfrage für eine der beiden Unterklassen (z. B. "FROM InternalSharing ...") erstelle, erstellt EclipseLink eine falsche Abfrage mit dem Klassennamen als Tabellenname anstelle des Entitätsnamens. Dies führt zu dem folgenden Fehler:

java.sql.SQLSyntaxErrorException: Table 'db.ABSTRACTSHARINGENTITY' doesn't exist 

Habe ich einen Fehler gemacht und dies ist das erwartete Verhalten? Wie kann ich gültige Abfragen für die Unterklassen erstellen, ohne die Klassennamen zu ändern/verschiedene Entitätsnamen zu entfernen?

+0

Schalten Sie die Protokollierung sein und sehen, was Eclipse sagt, wenn es Ihre Ausdauer Einheit verarbeitet. – Chris

Antwort

0

Ihre Erwartungen sind richtig IMHO. Der Standardtabellenname lautet "entityName", wenn kein Tabellenname angegeben ist. Da Sie den Entitätsnamen der Klasse "Abstract" überschreiben, sollte die verwendete Tabelle SHARING lauten. Und da es diese Vererbung hat, sollte das auch für die Unterklassen verwendet werden.

Alle diese Anfragen sollten

"SELECT ... FROM SHARING ..." 

Heben Sie einen Fehler auf Ihrem JPA-Provider eine Abfrage der Form werden zu generieren.

HINWEIS: Dies setzt voraus, dass AbstractEntitynicht eine JPA-Entität ist.

Sie würde natürlich erfordern einen Diskriminator auf diesem Modell, und auch Ihre „Zusammenfassung“ Klasse sollte wahrscheinlich abstract

Verwandte Themen