2012-08-17 15 views
5

Birçok tarafın paginated olması gereken Hazırda beklemedeki bir ilişkiyi nasıl eşleştirebilirim? (yani yüzlerce veya daha fazla ilişkili nesneniz var)
OneToMany ek açıklamasını kullanma (ya da xml eşdeğeri), tek taraflı nesneyi yükleme, ilgili nesnelerin tümünü bir bellek felaketine neden olarak göndermesi nedeniyle işe yaramaz. Yükleniyor).
Olası bir yaklaşım (zaten kullanmakta olduğum), bir sayfalama yöntemine bir sayfalama yöntemi ekleyerek, sayfalandırma parametrelerini tanıtabilirsiniz. Bununla birlikte, bunun ideal olmadığını görüyorum çünkü basamaklandırma gibi bazı özellikleri kaybediyorsunuz (örneğin, nesneleri ilişkilendirmek için DAO sınıfında ayarlayıcı yöntemleri dahil etmek zorundayım). Ayrıca, tek taraftaki nesnenin ilgili çok taraflı nesnelerini almak için bir yöntemi olmadığı için, bazı OOP anlamlarını kaybedersiniz. En iyi çözüm nedir?
Son noktayı daha iyi açıklayabilmek için, aralarında şu ilişkiyi içeren iki tane sınıfım olduğunu varsayalım: Çok fazla olan bir B
Bir OneToMany ek açıklama kullanarak bir A.getAllB() yöntemi yazamıyorum, yüzlerce olduğu için Bir A. ile ilişkili Bs, Sonuç olarak, sonuçları bir kerede yalnızca bir sayfa döndürmek için sayfalandırma paramları ekleyebileceğim getAllB() yöntemiyle ayrı bir ADaoImpl sınıfı oluşturuyorum. Bu doğru mu? Herhangi bir yardım takdir edilecektir.Hazırda beklemede sayfalandırılmış OneToMany ilişki

cevap

2

Ben de önerdiğiniz şeyleri aynen yapardım: Sayfalamada sayfalama parametrelerini alan ve belirtilen sonuç sayfalarını döndüren yeni bir yöntem oluşturun. Çocukları ana nesnenizde tutmak isteyip istemediğiniz ya da olmasın. Bu nesneler için geçici bir alan oluşturabilirsiniz.

public class Parent { 
    @Transient 
    private List<Child> children; 

    } 

    public class ParentDao { 

    // Solution 1 - You can keep the parent/child association 
    public void loadChildren(Parent parent, int firstResult, int maxResults) { 
     // do your query 
     parent.setChildren(query.list()); 
    } 

    // Solution 2 - Or just have your dao directly return the children and remove the list from Parent 
    public List<Children> getChildren(Parent parent, int firstResult, int maxResults) { 
     // do your query 
     return query.list(); 
    } 
    } 

Kodunuzun OO hissini kırmanın anlamı nedir? Ancak gerçekten sayfalandırma veri katmanının bir işlevidir. İlk çözüm ile gitmek o güzel "OO" hissinden bazılarını geri getirebilir.

İlgili konular