Annotazione delle proprietà ereditate per la persistenza
-
03-07-2019 - |
Domanda
Supponendo che io abbia una classe A come segue:
class A{
int id;
int getId(){};
void setId(int id){};
}
E una classe B come segue:
@Entity
@Table(name="B")
class B extends A{
string name;
@Column(length=20)
string getName(){}
void setName(){}
}
Come posso annotare il campo ID ereditato da A in modo che Hibernate / JPA sappia che è l'ID per l'entità? Ho provato semplicemente a posizionare @Id sul campo in A ma questo non ha funzionato. io ho provato a creare anche A un'entità e anche questo non ha funzionato.
Soluzione
Supponendo che non si desideri che la superclasse stessa rappresenti un'entità, è possibile utilizzare @MappedSuperclass
sulla superclasse per fare in modo che le sottoclassi ereditino le proprietà per la persistenza:
@MappedSuperclass
class A{
int id;
@Id
int getId(){};
void setId(int id){};
}
Prendi in considerazione l'idea di rendere astratto la superclasse. Vedi questa sezione del documento per maggiori dettagli.
Altri suggerimenti
Esistono diverse strategie che è possibile utilizzare. Ecco qualcosa che puoi provare:
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
class A{
int id;
@Id @GeneratedValue
int getId(){};
void setId(int id){};
}
@Entity
@Table(name="B")
class B extends A{
string name;
@Column(length=20)
string getName(){}
void setName(){}
}