Java 注释持久性的继承属性

Java 注释持久性的继承属性,java,hibernate,jpa,annotations,spring,Java,Hibernate,Jpa,Annotations,Spring,假设我的a级成绩如下: class A{ int id; int getId(){}; void setId(int id){}; } @Entity @Table(name="B") class B extends A{ string name; @Column(length=20) string getName(){} void setName(){} } 及乙类,详情如下: class A{ int id; int getId()

假设我的a级成绩如下:

class A{
   int id;
   int getId(){};
   void setId(int id){};
}
@Entity
@Table(name="B")
class B extends A{
   string name;

   @Column(length=20)
   string getName(){}
   void setName(){}
}
及乙类,详情如下:

class A{
   int id;
   int getId(){};
   void setId(int id){};
}
@Entity
@Table(name="B")
class B extends A{
   string name;

   @Column(length=20)
   string getName(){}
   void setName(){}
}
如何注释从中继承的id字段,以便Hibernate/JPA知道它就是id 对于实体?我试着简单地将@Id放在一个字段中,但没有成功。我
也尝试创建实体,但这也不起作用。

假设您不希望超类本身表示实体,您可以在超类上使用
@MappedSuperclass
让子类继承持久性的属性:

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

考虑将超类抽象化。有关更多详细信息,请参阅文档的第页。

您可以使用多种策略。以下是您可以尝试的:

@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(){}
}