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

有帮助吗?

解决方案

假设您不希望超类本身表示实体,您可以在超类上使用 @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(){}
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top