5

假设我有一个 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 中的字段上,但这不起作用。我也尝试将 A 设为实体,但这也不起作用。

4

2 回答 2

10

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

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

考虑使超类抽象。有关更多详细信息,请参阅文档的此部分

于 2009-01-06T21:19:59.967 回答
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(){}
}
于 2009-01-06T21:21:21.820 回答