J-SPR-HIB-UTR - 3 pytania i odpowiedzi ze szkolenia (czerwiec 2016)

Pytania w tym artykule pojawiły się podczas szkolenia Utrwalanie danych z JPA/Hibernate  realizowanego w dniach 27-29.06.2016r


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