假设我有一个A类如下:
class A{
int id;
int getId(){};
void setId(int id){};
}
B级如下:
@Entity
@Table(name="B")
class B extends A{
string name;
@Column(length=20)
string getName(){}
void setName(){}
}
如何从A中注释继承的id字段,以便Hibernate / JPA知道它是Id 对于实体?我试过简单地将@Id放在A中的字段上,但这不起作用。一世 尝试制作一个实体也是如此,这也没有用。
答案 0 :(得分:10)
假设您不希望超类本身表示实体,您可以在超类上使用@MappedSuperclass
让子类继承持久性的属性:
@MappedSuperclass
class A{
int id;
@Id
int getId(){};
void setId(int id){};
}
考虑将超类抽象化。有关详细信息,请参阅文档的this section。
答案 1 :(得分:1)
您可以使用多种策略。您可以尝试以下方法:
@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(){}
}