2016-02-03 9 views
5

@Embeddableとしてクラスに注釈を付けるか、@Embeddedようにプロパティを設定することができます。サンプルコード:@Embeddedと@Embeddableをいつ使用するのですか? Javaでは

@Embeddable 
class A{ 
... 
} 

class B{ 
... 
} 

@Entity 
class Foo { 
    A a; 
    @Embedded B b; 
} 

@Embedded@Embeddableを好みますか?複合主キーの

@Embeddableの使用:

+1

これらのアノテーションのJavadocに問い合わせましたか? – wero

答えて

0

この両方をアノテーションで休止状態で使用されています。

@Embeddedエンティティは、親エンティティと合併し、彼らはあなたが(特にレガシー・データベースとの)いくつかの列を持つ巨大なテーブルを持っているすべてのtime.Sometimesが宣言されたかのように同じように扱われます。しかし、いくつかの列は論理的に(顧客表の通り、市町村、電話番号のように)互いに結ばれています。すべてのフィールドを持つオブジェクトを作成したくない場合は、埋め込みアドレスオブジェクトを作成します。こうすることで、フィールドのフラットリストを持つ等しく巨大なPOJOを持つのではなく、オブジェクトにアドレス列を論理的にグループ化することができます。

0

私たちは人を持っているし、2つのPOJOをアドレスした場合、あなたは住所のために別のテーブルを作成したいとは思わないでしょうが、あなたは人のテーブル内のアドレスを埋め込みたいでしょう。したがって、AddressはPersonオブジェクトに値を加算していますが、個別には意味がありません。この場合、私たちは一緒に行くことがあります。

@Embeddable 
public class Address{ 
} 

@Entity 
public class Person 
{ 

@Embedded 
private Address address; 

} 
3

二つの主要な用途は、私の知る限りでは@Embedded/@Embeddableのためにあります。

はまず、最も重要:分割アップ大エンティティクラス。データベースの世界では、大きなテーブル(列が多いテーブル)が問題ありません。このような表を分割すると、状況が悪化し、データベース設計の原則と衝突する可能性もあります。 Javaで(又は一般的にはオブジェクト指向言語)、一方、大きなクラスがcode smellあります。ここでは、エンティティクラスを含むクラスをより小さな単位に分割したいと考えています。 @Embedded/@Embeddable私たちは簡単にデータベースのテーブルを分割することなく、これを行うことができます。

第二に、それはエンティティ間の共通のマッピングを再利用することができます。各テーブルに単純なリビジョントラッキングがあり、行を変更したユーザーのユーザー名と発生日時を含む2つの列があるとします。次に、これらの行をカバーするエンティティ@Embeddableを作成し、エンティティごとにこれらの列に対応する変数を繰り返すのではなく、すべてのエンティティにこのエンティティを再利用します。

関連する問題