Question

En supposant que j'ai une classe A comme suit:

class A{
   int id;
   int getId(){};
   void setId(int id){};
}

Et une classe B comme suit:

@Entity
@Table(name="B")
class B extends A{
   string name;

   @Column(length=20)
   string getName(){}
   void setName(){}
}

Comment annoter le champ d'identifiant hérité de A pour que Hibernate / JPA sache qu'il s'agit de l'identifiant  pour l'entité? J'ai simplement essayé de placer @ Id sur le terrain en A mais cela n'a pas fonctionné. je essayé de faire une entité aussi bien et cela n'a pas fonctionné.

Était-ce utile?

La solution

En supposant que vous ne voulez pas que la superclasse représente elle-même une entité, vous pouvez utiliser @MappedSuperclass sur la super classe pour que les sous-classes héritent des propriétés de persistance:

@MappedSuperclass
class A{
   int id;
   @Id
   int getId(){};
   void setId(int id){};
}

Envisagez de rendre la superclasse abstraite. Voir cette section du doc ??pour plus de détails.

Autres conseils

Vous pouvez utiliser un certain nombre de stratégies. Voici quelque chose que vous pouvez essayer:

@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(){}
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top