2017-02-13 122 views
8

Kalıcı Koleksiyonu, içerdiği nesnelere göre filtrelemeye/filtrelemeye çalışıyoruz (belirli girdileri filtreleyin).Hazırda Bekletme - Yükleme sonrası yüklemeyi işleme

bu manipülasyon farklı koleksiyonları içeren farklı nesneler çok sayıda gerçekleştirilen olacağından mümkün olduğunca genel olmalıdır. HQL \ SQL düzeyinde filtreleme, sürdürülmesi imkansız olduğu için bir seçenek değildir. Bu, toplama yüklendikten ve başlatıldıktan sonra gerçekleştirilmesi gerektiği anlamına gelir. Şu anda tek nesnelerini işlemek için Hazırda Beklemedeki Olayların birçoğunu kullanıyoruz, bu yüzden InitializeCollectionEvent dinlemeye çalıştık. Ancak, ortaya çıktığı gibi, koleksiyonlarımızın çoğu HQL Fetch kullanılarak başlatıldı, böylece bu etkinlik onlar için artırılmayacak.

Kullanabileceğimiz herhangi bir Hazırda Bekleme Etkinliği var mı?

Koleksiyonların yüklendikten sonra işlendiği başka bir yer var mı?

Hazırda Bekletme 4.1.7 kullanıyoruz.

cevap

1

Ben koleksiyon yüklendi zaman, sunucu tarafında koleksiyon filtrelemek için iyi bir fikir olmadığını düşünüyorum. Eğer bunu yaparsanız, yanlışlık gider, db modeli veya varlık yapısını yeniden düşünün. Toplamayı filtrelemenin en iyi yollarından biri - HQL'yi kullanır. Ya da @Where veya @Loader, @Filter'ı kullanabilirsiniz. Mükemmel bir dünyada

+0

sana katılıyorum, ama bu kitlesel ve karmaşık üretim sistemidir ve etki çok büyük ve riskli olacağından modeli \ veritabanını değiştirme, bu durumda bir seçenek değildir ederim. Yukarıda belirttiğim gibi, Filtreleme HQL ve aynı zamanda Hazırda Bekletme ek açıklamaları ile önerildiği gibi yapılabilir, ancak daha sonra bakımını yapmak çok zor olacaktır. İdeal olarak, manipülasyon, bir olay veya Loader sınıfı kullanılarak yükleme aşamasında gerçekleştirilmelidir. – Nir

+0

Tamam, @PostLoad ??? Emin değilim ama deneyebilirsiniz. Ve org.hibernate.Interceptor'da denemenizi tavsiye ederim, sadece kendi uygulamanızı oluşturun, google'a kolay, Interceptor gerçekten güçlü bir sınıf. – idmitriev

+0

Aracılar, koleksiyonları işleyebilir ancak başlatılamazlar. – Nir