Cześć :)
Uczę się od kilku dni stacku javowego i mam kilka pytań, na które nie znalazłem do tej pory odpowiedzi. Będę wdzięczny za pomoc :)
-
Co się dzieje jeśli w bloku @Transactional złapiemy wyjątek w Try i nie zostanie on rozpropagowany? Czy wykona się rollback transakcji?
Chciałem napisać swoje transakcje i obsłużenie rollbacku w przypadku błędu opakowanego w Either, ale dostaję wyjątek, że "Not allowed to create transaction on shared EntityManager" (można rzucić okiem w repo). -
Jak działąją Future'y? Czy jak wywołam get() na CompletableFuture to core CPU zostanie zwolniony i będzie mógł obsłużyć inny request czy muszę zwrócić CompletableFuture z kontrolera, żeby rzeczy wykonały się asynchronicznie.
-
EntityManager powinien mieć scope Transient czy Request (w dokumentacji Hibernate zalecają Request, ale EMFactory domyślnie chyba zwraca nową instancję przy każdym wywołaniu).
Chciałem napisać sobie klasę ze scopem Request, które by przyjmowało EMFactory i zwracało ten sam EM, ale leciał wyjątek nawet jak dałem w adnotacji ze scopem proxyMode = ScopedProxyMode.TARGET_CLASS -
Follow-up do poprzedniego pytania. Czy 1st lvl cache w JPA jest na poziomie EM czy PersistenceContext (czy jeśli wstrzyknę drugi EM w ramach tego samego PC to czy zmiany, które nie są jeszcze zapisane do DB będą tam widoczne)?
-
Musiałem dodać @SpringBootApplication(exclude = HibernateJpaAutoConfiguration.class) bo inaczej leciał wyjątek
"class org.springframework.orm.jpa.EntityManagerHolder cannot be cast to class org.springframework.orm.hibernate5.SessionHolder".
Gdzie znaleźć info za co odpowiada ta klasa? Google zwraca tylko tutoriale jak to wyłączyć...
Na drugim branchu mam wersję "springową" (ze springową obsługą transakcji). Jakbyście mogli rzucić okiem i podpowiedzieć co lepiej zrobić inaczej :)