Pregunta

Suponiendo que tengo una clase A como sigue:

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

Y una clase B como sigue:

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

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

¿Cómo puedo anotar el campo de ID heredado de A para que Hibernate / JPA sepa que es el ID?  para la entidad? Intenté simplemente colocar @Id en el campo en A, pero esto no funcionó. yo Intenté hacer de A una entidad también y esto tampoco funcionó.

¿Fue útil?

Solución

Suponiendo que no quiere que la superclase represente a una entidad, puede usar @MappedSuperclass en la superclase para que las subclases hereden las propiedades de persistencia:

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

Considere hacer el resumen de la superclase. Consulte esta sección del documento para obtener más detalles.

Otros consejos

Hay una serie de estrategias que puedes usar. Aquí hay algo que puedes probar:

@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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top