Her ikisi de bire çok ilişkisi üzerinde çalıştığı için a @OneToMany
ve @ElementCollection
ek açıklama kullanmak arasındaki fark nedir ?
Her ikisi de bire çok ilişkisi üzerinde çalıştığı için a @OneToMany
ve @ElementCollection
ek açıklama kullanmak arasındaki fark nedir ?
Yanıtlar:
@ElementCollection
Varlıkları haritalamak için kullanılırken, esas olarak varlıkları haritalamak için (gömülebilir veya temel) olduğuna inanıyorum @OneToMany
. Yani hangisinin kullanılacağı, elde etmek istediğiniz şeye bağlıdır.
ElementCollection
artık tescilli Hazırda Bekletme notuna göre tercih edilen standart bir JPA notudur CollectionOfElements
.
Bu, koleksiyonun bir varlık koleksiyonu olmadığı, basit türlerin (Dizeler, vb.) Veya gömülebilir öğelerin bir koleksiyonunun (sınıfın açıklamalı olduğu @Embeddable
) olduğu anlamına gelir.
Bu aynı zamanda, öğelerin tamamen içeren varlıklara ait olduğu anlamına gelir: varlık değiştirildiğinde değiştirilir, varlık silindiğinde silinir, vb. Kendi yaşam döngülerine sahip olamazlar.
@ElementCollection
basit veya katıştırılmış türle bire çok ilişki uygulamak istediğinizde kodu basitleştirmenize olanak tanır. Örneğin, JPA 1.0'da, bir e-posta listesiyle bire çok ilişkisine sahip olmak istediğinizde, sadece birincil anahtarı ve söz konusu olanı içeren String
basit bir POJO ( StringWrapper
) varlığı oluşturmanız gerekiyordu String
:
@OneToMany
private Collection<StringWrapper> strings;
//...
public class StringWrapper {
@Id
private int id;
private String string;
}
JPA 2.0 ile şunları yazabilirsiniz:
@ElementCollection
private Collection<String> strings;
Daha basit, değil mi? @CollectionTable
Ek açıklamayı kullanarak tablo ve sütun adlarını yine de kontrol edebileceğinizi unutmayın .
Temel veya Gömülü : @ElementCollection
Varlıkları : @OneToMany veya @ManyToMany
@ElementCollection:
@OneToMany / @ManyToMany:
ElementCollection, eşlemeleri veya koleksiyonu için tabloyu geçersiz kılabilir, böylece birden çok varlığın aynı Embeddable sınıfa başvurmasını sağlayabilir, ancak her birinin bağımlı nesnelerini ayrı bir tabloda depolamasını sağlayabilirsiniz.