SORU
19 Mart 2011, CUMARTESİ


Tek Yönlü ve çift Yönlü dernekler arasındaki fark nedir?

Tek Yönlü ve çift Yönlü dernekler arasındaki fark nedir?

Tablo db oluşturulan beri aynı,o yüzden bulduğum tek fark bidiretional bu assocations her tarafı bir diğer ifade eder ve tek yönlü değil sahip olmasıdır.

Bu tek Yönlü bir dernektir

public class User {
    private int     id;
    private String  name;
    @ManyToOne
    @JoinColumn(
            name = "groupId")
    private Group   group;
}

public class Group {
    private int     id;
    private String  name;
}

Çift Yönlü Derneği

public class User {
    private int     id;
    private String  name;
    @ManyToOne
    @JoinColumn(
            name = "groupId")
    private Group   group;
}
public class Group {
    private int         id;
    private String      name;
    @OneToMany(mappedBy="group")
    private List<User>  users;
}

Fark grup kullanıcı bir başvuru olsun.

Eğer bu tek fark olup olmadığını merak ediyorum? tavsiye edilir?

CEVAP
19 Mart 2011, CUMARTESİ


Ana differenece çift yönlü ilişki, açık bir sorgu olmadan, diğer tarafta erişebilirsiniz böylece her iki yönde seyir erişim sağlar. Ayrıca her iki yönde geçişli seçenekleri uygulamak için izin verir.

Seyir erişimi her zaman "" ve "çok-çok" ilişki. bir, özellikle için iyi olmadığını unutmayın Users: binlerce içeren Group Bir Hayal

  • Nasıl onlara erişmek ister misin? Bu kadar çok Userler, genellikle ihtiyaç için geçerli bazı filtreleme ve/veya sayfa numaralarını, böylece ihtiyacınız çalıştırmak için bir sorgu her neyse (sürece kullanın collection filtering, görünüşe göre bir hack benim için). Bazı geliştiriciler açıkçası performans için iyi değil bu gibi durumlarda, hafıza filtre uygulamak eğilimindedir. Böyle bir ilişki geliştiriciler, bu tür bir performans etkileri dikkate almadan kullanmaya teşvik edebilir unutmayın.

  • Nasıl GroupUser yeni s eklemek istiyorum? Neyse ki, Hazırda bekleme o zaman kalıcı bir ilişki sahibi arkasına bakıyor, sadece User.group ayarlayabilirsiniz. Eğer bellek nesneleri tutarlı tutmak istiyorsanız ancak, siz de Group.users 10 *eklemek gerek. Ama veritabanından Group.users tüm öğeleri getirmek için Hazırda yapacak!

Yani, Best Practices gelen öneri ile aynı fikirde değilim. İki yönlü ilişkiler tasarım için dikkatli kullanım durumları (her iki yönde seyir erişim ihtiyacınız var mı?) dikkate ihtiyacın var ve olası performans üzerindeki etkileri.

Ayrıca Bkz:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chip Johnson

    Chip Johnson

    30 AĞUSTOS 2007
  • DrePwn

    DrePwn

    22 Temmuz 2011
  • xSammyJoe1

    xSammyJoe1

    19 Temmuz 2011