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
5
A
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
- 1. OneToMany hazırda kriterleri çiftleri
- 2. Doctrine OneToMany ilişki hatası
- 3. Hazırda Bekletme Süresi Hazırda Beklemede
- 4. SetMaxResults() Hazırda Beklemede değil
- 5. Hazırda Beklemede Singleton SessionFactory
- 6. Yabancı anahtar alanı null Hazırda beklemede @OneToOne eşleştirmesi Hazırda/JPA
- 7. Varsayılan olarak Hazırda Beklemede İyileştirme
- 8. mysql sırası hazırda beklemede eşdeğer
- 9. Hazırda Bekletme OneToMany FetchType.EAGER dönen değerler yok
- 10. Hazırda yanlış varlık alt türü oluşturma hazırda beklemede
- 11. Hazırda beklemede tek bir tabloyu kullanarak üç tabloya nasıl katılırsınız?
- 12. Hibernate @OneToMany ve UNIQUE kısıtlaması
- 13. JPA KriteriQuery OneToMany
- 14. Spring Roo, Hazırda Beklet, Bire çok ilişki ek tablo oluşturur
- 15. Sistem beklemede/uyku/hazırda bekletme .NET Windows Service'den algılanıyor mu?
- 16. Karşıdaki tarih bölümüyle yalnızca Hazırda Beklemede olan Timestamp ile karşılaştırın
- 17. Hazırda beklemede olan çok yönlü bir ilişki var - neden birleştirme tablosu daha iyi? Bu belgede (tek yönlü bölümüne gidin) 'de
- 18. Sayfalandırılmış API Çağrılar RxSwift ile
- 19. Symfony2'deki Koşullu İlişki
- 20. Toplu iş dosyasından EXE çağrısı * beklemede * beklemede
- 21. Android Bildirimi Servis beklemede beklemede arama beklemiyor
- 22. OneToMany/ManyToOne SchemaException
- 23. Java: JPA Entity @OneToMany
- 24. Doctrine 2 OneToMany Kaset SET NULL
- 25. JPA Varlık olmayabilecek birebir ilişki
- 26. ilişki
- 27. ilişki
- 28. İlişki
- 29. : ilişki
- 30. HQL bire bir ilişki