Pytania w tym artykule pojawiły się podczas szkolenia Utrwalanie danych z JPA/Hibernate realizowanego w dniach 27-29.06.2016r
Sławomir Borowiec
SPRING DEVELOPER, TRAINER
Który rodzaj buforowania jest najlepszy z punktu widzenia developera i samej aplikacji ?
W JPA mamy 2 rodzaje buforowania first level cache i second level cache oraz cache query , który defacto współpracuje z tym drugim. Jednak z poziomu programisty pod kontem utrzymania , łatwości implementacji i wydajności polecam cache oparty na frameworku np Spring na poziomie metod biznesowych ponieważ może korzystać z tego samego deskryptora opisującego działanie i zachowanie buforowanie np ehcache.xml a jego prostota i konfigurowalność będzie najlepsza jest to standard :JCache (JSR-107).
Czy relacje dwukierunkowe są dobre i kiedy jest stosować ?
Moja rada : zawsze jeśli tylko można ich unikamy ponieważ :
1.Następuje złamanie enkapsulacji
2. Musimy zawsze pamiętać aby odsłużyć dwie strony relacji
3. Typ bardziej abstrakcyjny powinien być ukryty
4. Cykliczność
5. Zawsze lepiej stosować agregator , czyli pojedyńczy punkt dostępu
Stosuj je tylko wtedy kiedy jest faktyczne uwarunkowanie biznesowe.
Jak uniknąć OutOfMemoryException ?
Nie ma na to uniwersalnego pytania ale musimy pamiętać , że następuje to wtedy kiedy wczytujemy w bufor hibernate za duży graf obiektów.
Jedne z możliwych rozwiązań to :
1. czyszczenie cache
2. flush dla kontekstu
3. dla przetwarzania wsadowego : hibernate.jdbc.batch.size = 50
4. wyłączenie cache drugiego poziomu hibernate.cache.use_second_level_cache = false
5. StatelessSession
6 zastosuj batch processing