2010-12-08 19 views
8

Aşağıdaki JPA sınıfına sahibiz:JPA'da bir koleksiyon özelliğini dinamik olarak nasıl sıralayabilirim?

@Entity 
class Supplier { 
    // ... id property etc. 

    @OneToMany 
    @OrderBy("someProperty") 
    private List<Region> regions; 
} 

Bu normal durumda iyi çalışır. Bununla birlikte, değerlerin nameEn, nameDe, nameZh gibi özelliklerde saklandığı bazı çok dilli verilere sahibiz. Kullanılacak tam özellik, oturum açmış kullanıcıya bağlıdır. Örneğin, Almanca konuşan bir kullanıcı bölgeleri @OrderBy("nameDe") ile açıklanmış gibi görmelidir.

Bunu nasıl başarabilirim?

Koleksiyonum yüklendikten sonra kodumda sıralayabildiğimin farkındayım, ancak bu durum sonuçların sayfalandırılmasını oldukça zorlaştırıyor.

+2

Devamlılık biriminiz için EntityManagerFactory oluşturulduğunda ek açıklamalar bir kez işlendiğinden, bunu ek açıklamaya katıştıramazsınız. Yapmaya çalıştığınız, dinamik bir sorgu oluşturmaya benzer. –

cevap

4

Bunları java'da sıralayabilirsiniz. Muhtemelen bir alıcıda:

List<Region> getRegions(){ 
    sorted = new List<Regions>(regions); 
    Collections.sort(sorted, new RegionComparator(getUserLanguage())); 
    return sorted; 
} 
+0

Koleksiyonda 1000 öğeniz varsa ve bazı mülklere göre sıralı olarak yalnızca ilk 10'u almak istiyorsanız. Bunu dbms içinde yapmak çok daha verimli olurdu –

+0

@LaurynasTretjakovas Sonra sıralamanızdan sonra ilk 10 öğe üzerinde yinelemek istiyorsunuz. Bir veritabanının daha verimli olacağını düşündüğünüzden emin değilsiniz. –

+1

@ b1nary.atr0phy çünkü veritabanı öğeleri sıralamak için bir indeks kullanabilir ve çok fazla kayıtlarınız varsa, tel üzerinden ihtiyaç duyduğunuzdan daha fazla veri aktarımı yapabilirsiniz. –

İlgili konular