2017-06-07 4 views
1

diese Klasse Gegeben:Warum kann ich eine Getter-Methode für die Entitätszuordnung nicht überschreiben und kommentieren?

@MappedSuperclass 
public abstract class AbstractEntity { 

    int id; 
    public void setId(int id) { this.id = id; } 
    public int getId() { return id; } 

    // other mappings 
} 

Ich möchte eine Einheit definieren:

@Entity 
public class SomeEntity extends AbstractEntity { 

    @Override 
    @Id // or @OneToOne etc. 
    public int getId() { return id; } 
} 

Aber das scheitert mit einem „No bestimmten Kennung“ (oder ein „Typ konnte nicht für bestimmen“) Fehler auf SomeEntity. Wenn ich den Getter aus der Superklasse entferne, funktioniert es. Kann ich diese Überschreibungsstrategie nicht machen? Warum nicht, oder wenn ja - wie?

Hinzufügen

@AttributeOverride(name = "id", column = @Column(name = "ID")) 

in die Unterklasse ändert nicht den Fehler.

+0

Mögliche Duplikate von [Hibernate: Wie überschreiben ein Attribut von zugeordneten Superklasse] (https://stackoverflow.com/questions/5257921/hibernate-how-override-anattribute-from-map-super-class) – crizzis

+0

@crizzi Diese Antwort löst das Problem nicht. – Mark

+0

Die JPA-Vererbung folgt der Java-Vererbung. Sie können also die Spalte überschreiben, die in der Datenbank verwendet wird, nicht jedoch die Zuordnung selbst. Es gibt also keine Möglichkeit, die einmal verwendete ID-Spalte zu ändern oder ein vorhandenes Feld als ID in einer Unterklasse zu markieren. Sie können Dinge austricksen, indem JPA Felder in Ihrer abstrakten Klasse aufgreift (benennen Sie sie etwas anders und markieren Sie sie als flüchtig) und definieren Sie dann die Zuordnungen zu den Eigenschaften in Ihren Unterklassen, siehe https://stackoverflow.com/questions/13874528/what -ist-der-zweck-von-acces-type-field-accesstype-property-and-access um Zugangstypen zu ändern – Chris

Antwort

-1

Damit Sie eine Entitätsklasse erstellen können, müssen die Anforderungen erfüllt sein. Ex. muss einen öffentlichen/privaten Konstruktor haben. Hier

ist die Liste der Anforderungen:

http://docs.oracle.com/javaee/5/tutorial/doc/bnbqa.html

Hoffnung, das hilft.

+0

Welche Anforderungen erfüllt meine Klasse nicht? – Mark

+0

Soweit ich das sehen kann: "Die Klasse muss mit der Annotation javax.persistence.Entity kommentiert werden." – RostSunshine

+0

Was? Es ist die einzige Anmerkung zur Klasse ... – Mark

Verwandte Themen