JPA

2011-08-29 28 views
6

'daki i18n tablolarının eşlenmesi Tabloları JPA kullanarak bir veritabanından (60 tablodan) eşleştirmeye çalışıyorum. Bunu çok dilli bir uygulama için yapıyorum, dolayısıyla her bir veri parçası birden fazla dilde mevcut olmalıdır.JPA

Veritabanı tablo yapmam bunun gibi bir şeydir. RegionLanguage tablosuyla ilgili bir Bölge tablom var. RegionLanguage tablosu, aslında o bölge için açıklamayı farklı dillerde tutar. Bu diyagram bir göz isteyebilirsiniz:

enter image description here

JPA geliyor

, bana zor mümkün olduğunca az ilişkilendirmeleri gerektirecektir şekilde eşlemek bulabilirsiniz. İkincil tablo kavramını kullanmayı denedim, ancak bazı durumlarda bu bir @OneToMany ilişkisi olduğundan başarısız oluyor. Tercihen, bu iki tabloyu tek bir nesne olarak gösterecek bir çözüm düşünmekteydim.

Yardımınız için teşekkür ederiz.

Şimdiden teşekkürler.

+2

Bu sorun için bir çözüm buldunuz mu? Ve eğer öyleyse, paylaşır mısın (bir cevap olarak)? Aynı sorunla karşı karşıyayız, henüz hoş bir çözüm bulamadık (en çok N + 1 sorguları, kesinlikle istemiyoruz). – wimvds

+0

Hangi JPA sağlayıcısı kullanıyorsunuz? – siebz0r

+0

Bölge ve RegionLanguage arasındaki basit bir @OneToMany ilişkisinin sizin için neden çalışmadığını tam olarak anlamıyorum. –

cevap

0

Bu tuhaf diyagramı anladığımdan emin değilim ... RegionLanguage'ın bir tür dış anahtarı var. Bölgede yalnızca bir sütun varsa ('şemada gösterildiği gibi), sadece' RegionLanguage 'ile eşleştirebilirsiniz ve istediğiniz gibi yalnızca bir varlığa sahip olursunuz --- hiçbir bilgi kaybolmaz;).

Fakat cidden, nasıl haritalanmasını istersiniz? Böyle

class Region { 
//.. the missing fields not shown in diagram 
    List<String> languages; // take only language to avoid creating separate entity for region language 
} 

falan: Eğer böyle bir şey var mı istiyorsunuz, tabloların geri kalanı i18n tablolarla birleştirilir nasıl söylemedi Her durumda

class RegionInnerJoinRegionLanguage { 
// all fields from Region 
// all fields from RegionLanguage 
} 

. Açıklamanızdan, tüm tabloların RegionLanguage'e fk olduğunu tahmin ediyorum. Bölge tablosunun şeylerin büyük planında kullanıldığından emin değilim. Sanırım bu sadece dilleri gruplamak için… Ben bu 'modelleri' İsviçre'yi hayal ediyorum (bir 'bölge' 4 dil) ... Ama çeşitli bölgelerde konuşulan dillerle ne yapacaksınız? Birkaç tane Fransızca, İngilizce, vb. Dilleriniz olacak mı (her bölge için bir tane) ve tüm veriler bunlarla çarpılacak mı?

Bunu sormak istemediğini biliyorum ... Sadece bu soru için veri yapınızı çok basitleştirdiğini düşünüyorum ... Öyle ki, gerçekten neyi başarmak istediğinizi tahmin etmek zor. Eğer dizeleri yaklaşımının listesini kullanmak istiyorsanız Her durumda

, bunu deneyebilirsiniz: Eğer tek bir varlık haline hem tabloları koymak istiyorum neden

@ElementCollection 
    @CollectionTable(name="RegionLanguage", 
     [email protected](name="regionID") // or whatever... it's not on your diagram. 
) 
    @Column(name="langage") 
    private List<String> langages; 

Hala anlamıyorum .. Eğer 'salt okunur' verilerse, bir görünüm oluşturmayı ve haritalamayı deneyebilirsiniz --- her zaman 'çıkış';). Ama (her ikisi de, aslında) biraz fazla komplikasyon, aklıma - seni gelecekte ısıracak. Benim tavsiyem 'basit OneToMany haritalaması' ile devam etmektir.