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.

È stato utile?

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(){}
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top