0

私は次のエンティティクラス構造を持っています

製品クラス

@Entity
@Table(name = "PRODUCTS")
public class Product implements Serializable{

@Id
private productSlNo;
@Column(name = "PRODUCT_ID")
private String productNo;

ProductDetail クラス

@Entity
@Table(name = "PRODUCTDETAILS")
public class ProductDetail extends Product implements Serializable {

@Column(name = "PRODUCT_DESC")
private String productDesc;

私はすでにproductNoProduct クラスにあるので、クラスで宣言しませんでしたProductDetail

一意のキーがクラスで定義されているため、クラスに必須の@Id注釈を付ける方法を知りたいです。そうしないと、The entity has no primary key attribute definedエラーが発生します。 ProductDetail エンティティの一意のキーですProductDetailProductproductNo

どうすればこれを解決できますか? どんな助けも非常に高く評価されます。

更新 1

ProductDetail クラス

@Entity
@Table(name = "PRODUCTDETAILS")
public class ProductDetail implements Serializable {

@Id
@Column(name = "PRODUCT_ID")
private String productNo;

@Column(name = "PRODUCT_DESC")
private String productDesc;

製品クラス

@Entity
@Table(name = "PRODUCTS")
public class Product implements Serializable{

@Id
private productSlNo;

@Id
@Column(name = "PRODUCT_ID")
@OneToOne 
@MapsId     
private String productNo;

ProductDetail productDetail;
4

2 に答える 2

1

エンティティ継承のデフォルトの戦略は、すべてのエンティティのすべてのフィールドを同じテーブルに格納することです。したがって、サブエンティティで別のテーブルを指定するため、マッピングは意味がありません。

まず、使用する継承戦略を選択し、それに応じてクラスに注釈を付けます。3 つの継承戦略が定義され、ドキュメントで説明されています。

とはいえ、製品とその製品に関する追加の詳細情報を取得することが目的の場合は、継承を使用するのではなく、OneToOne 関連付けを使用する必要があります。

于 2013-06-05T11:15:56.393 に答える