@OneToMany
と@ElementCollection
アノテーションの使用はどちらも1対多の関係で機能するので、違いは何ですか?
@OneToMany
と@ElementCollection
アノテーションの使用はどちらも1対多の関係で機能するので、違いは何ですか?
回答:
ElementCollection
標準のJPAアノテーションであり、独自仕様のHibernateアノテーションよりも優先されるようになりましたCollectionOfElements
。
これは、コレクションがエンティティのコレクションではなく、単純なタイプのコレクション(文字列など)または埋め込み可能な要素のコレクション(注釈付きクラス@Embeddable
)であることを意味します。
また、要素はエンティティを含むエンティティによって完全に所有されます。エンティティは、エンティティが変更されると変更され、エンティティが削除されると削除されます。独自のライフサイクルを持つことはできません。
@ElementCollection
単純型または埋め込み型との1対多の関係を実装する場合に、コードを簡略化できます。たとえば、JPA 1.0 String
では、sのリストと1対多の関係が必要な場合、StringWrapper
主キーとString
問題の問題のみを含む単純なエンティティPOJO()を作成する必要がありました。
@OneToMany
private Collection<StringWrapper> strings;
//...
public class StringWrapper {
@Id
private int id;
private String string;
}
JPA 2.0では、次のように簡単に記述できます。
@ElementCollection
private Collection<String> strings;
もっと簡単ですよね?@CollectionTable
注釈を使用して、テーブルと列の名前を引き続き制御できることに注意してください。
ElementCollectionはマッピングまたはコレクションのテーブルをオーバーライドできるため、複数のエンティティが同じEmbeddableクラスを参照するように設定できますが、それぞれの依存オブジェクトを個別のテーブルに格納できます。