Her ikisi de bire çok ilişkisi üzerinde çalıştığı için a @OneToManyve @ElementCollectionek açıklama kullanmak arasındaki fark nedir ?
Her ikisi de bire çok ilişkisi üzerinde çalıştığı için a @OneToManyve @ElementCollectionek açıklama kullanmak arasındaki fark nedir ?
Yanıtlar:
@ElementCollectionVarlı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.
ElementCollectionartı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.
@ElementCollectionbasit 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 Stringbasit 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? @CollectionTableEk 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.