2016-03-25 13 views
0

İki varlığım var, onları A ve B olarak adlandırın. Bu varlıklar birbiriyle üçten çok farklı ilişkilerden birinde olabilir.Hazırda bekletme - iki sınıf arasındaki çoktan çoğa ilişkilendirmeler

Bunu hazırda nasıl hazırlarım? alanları olurdu

Set<B> relationX; 
Set<B> relationY; 
Set<B> relationZ; 

Ve benzer sınıf B: fikir A sınıfı alanları olurdu olduğunu ben dernek çift yönlü olmak istiyorum çünkü

Set<A> relationX; 
Set<A> relationY; 
Set<A> relationZ; 

iki sınıfları hem de tüm üç alan var. Üç ayrı ilişkilere ayırt yolu yoktur olduğu gibi "standart" bunun gibi birçok çoğa ek açıklamasını Hazırda Having

...

@JoinTable(name = "A_relX_B", 
     joinColumns = {@JoinColumn(name = "A_ID")}, 
     inverseJoinColumns = {@JoinColumn(name = "B_ID")} 
) 

..., işe yaramaz. Bunu nasıl başarabilirim? Veya m-to-il ilişkisini el ile çözmem gerekiyor mu?

+0

Yaptığınız yol doğrudur. –

+0

Yaptığım şekilde mi? Verdiğim örneğin nasıl çalıştığını göremiyorum, çünkü hiçbir yerde ilişkiyi belirtmediğim için –

+0

Lütfen aşağıdaki cevabımı inceleyin. –

cevap

1

Doğru yolda zaten:

public class A { 
    @ManyToMany 
    @JoinTable(name = "A_relX_B", 
    joinColumns = {@JoinColumn(name = "A_ID")}, 
    inverseJoinColumns = {@JoinColumn(name = "B_ID")} 
) 
    Set<B> relationX; 

    @ManyToMany 
    @JoinTable(name = "A_relY_B", 
    joinColumns = {@JoinColumn(name = "A_ID")}, 
    inverseJoinColumns = {@JoinColumn(name = "B_ID")} 
) 
    Set<B> relationY; 

    @ManyToMany 
    @JoinTable(name = "A_relZ_B", 
    joinColumns = {@JoinColumn(name = "A_ID")}, 
    inverseJoinColumns = {@JoinColumn(name = "B_ID")} 
) 
    Set<B> relationZ; 
} 

Temelde, bu bağımsız kuruluşlardır, her bir ayrı ilişki eşleştirilmiş olduğu sürece onlardan yüz bir (en yaygın durum) varsa veya olabilir tablo.

Aynı şey B tarafındadır (her ilişkilendirmede ters tarafı seçmek için mappedBy'u unutmayın).

+0

Gerçekten mi? Aynı şekilde mi çalışacak? Hibernate'i hafife aldım gibi görünüyor. Teşekkürler –

+0

:) Rica ederim. –

0

Bunu, tablolarınızdan çoktan çoğa ilişkilerini normalleştirmeden gerçekleştirmenin kolay bir yolu olup olmadığını bilmiyorum. İlişkisel veritabanında çoktan çoğa ilişkisi olması genellikle no-no olarak kabul edilir ve bunları yönetmek için çapraz referans tabloları gerektirir.

+0

Evet, bir RDB'deki çoktan çoğa, hayır değil. Ancak, Hibernate bir soyutlama seviyesi sağlar ve bu nedenle birçok kişiyle yardımını haritalamak mümkündür. Bu benim için çoktan çoğa ilişkisinin ayrıştırılması ile ilgilenen @JoinTable ek açıklama ile yapılır. –

+0

Hiçbir zaman Hibernate'i hiçbir zaman tam olarak keşfetmedim, bu yüzden tüm özelliklerini bilmiyorum, ancak bu durumda şunu söyleyebilirim: sadece bir _can_ birşeyler yaptınız, bu demek ki _should_ anlamına gelmez. Tablolarınızı normalleştirdiyseniz, başlamak için bu problemle uğraşmak zorunda kalmazsınız, değil mi? Ama Dragan bunu benden daha iyi halletmiş gibi görünüyor, ben de onun cevabını vereceğim. – NAMS

İlgili konular