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.

Foi útil?

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
scroll top