質問

次のようにクラス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  エンティティのために? Aのフィールドに単に@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