Anotar propriedades herdadas para persistência
-
03-07-2019 - |
Pergunta
Supondo que eu tenha uma classe A da seguinte maneira:
class A{
int id;
int getId(){};
void setId(int id){};
}
E uma classe B da seguinte maneira:
@Entity
@Table(name="B")
class B extends A{
string name;
@Column(length=20)
string getName(){}
void setName(){}
}
Como posso anotar o campo de identificação herdado de um Hibernate/JPA sabe que é o ID da entidade? Eu tentei simplesmente colocar @id em campo em um, mas isso não funcionou. Tentei fazer uma entidade também e isso também não funcionou.
Solução
Supondo que você não queira que a superclasse represente uma entidade, você pode usar @MappedSuperclass
na super classe para que subclasses herdem as propriedades para persistência:
@MappedSuperclass
class A{
int id;
@Id
int getId(){};
void setId(int id){};
}
Considere fazer o resumo da superclasse. Ver esta seção do documento para obter mais detalhes.
Outras dicas
Existem várias estratégias que você pode usar. Aqui está algo que você pode tentar:
@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(){}
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow