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.
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
@crizzi Diese Antwort löst das Problem nicht. – Mark
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