为持久性注释继承的属性

时间:2009-01-06 21:14:57

标签: java hibernate jpa annotations spring

假设我有一个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中的字段上,但这不起作用。一世 尝试制作一个实体也是如此,这也没有用。

2 个答案:

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