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であることを認識できるようにするにはどうすればよいですか?Aのフィールドに@Idを配置しようとしましたが、うまくいきませんでした。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 に答える