@Embedded アノテーション手法と @OneToOne アノテーション手法の違いは何ですか。Embedded では、Java クラスにクラス内の「Has a」関係が含まれており、@Embedded アノテーションの助けを借りて、データベース内に has a オブジェクトを永続化するためです。また、OneToOne 関係では、データベースにオブジェクトを保持します。
5 に答える
@OneToOne は、1 対 1 の関係にある 2 つの DB テーブルをマッピングするためのものです。たとえば、Customer は常に Name テーブルに 1 つのレコードを持っている場合があります。
または、これらの名前フィールドが Customer テーブル (別のテーブルではなく) にある場合は、@embedded が必要になる場合があります。一見すると、名前フィールドを標準属性として Customer エンティティに追加することもできますが、同じ列が複数のテーブルに表示される場合に便利です (たとえば、Supplier テーブルに名前列がある場合など)。
構成と集約の違いです。@Embedded オブジェクトは、常に親のライフサイクル内で管理されます。親が更新または削除されると、それらも更新または削除されます。@OneToOne オブジェクトは、 @Join アノテーションの cascadeType オプションを介して構成を模倣できますが、デフォルトでは集約されます。つまり、ライフサイクルは親オブジェクトのライフサイクルから分離されます。
@Embedded は通常、複合主キーを埋め込み可能なクラスとして表します。
@Entity
public class Project {
@EmbeddedId ProjectId id;
:
}
@Embeddable
Class ProjectId {
int departmentId;
long projectId;
}
主キー フィールドは、埋め込み可能なクラスで定義されます。エンティティには、@EmbeddedId で注釈が付けられた単一の主キー フィールドが含まれ、その埋め込み可能なクラスのインスタンスが含まれます。このフォームを使用する場合、埋め込み可能なクラス自体が完全な主キー値を表すことができるため、別の ID クラスは定義されません。
@OneToOne は、1 対 1 の関係にある 2 つの DB テーブルをマッピングするためのものです。@Id が主キーになります。