Wpis z mikrobloga

#programowanie #pytanie #java #hibernate

Ogarnia ktoś tutaj Hibernate'a? Mam kod, który robi podstawowe operacje na bazie danych (niestety nie mój i podejrzewam, że nie mogę go pokazać). Na wszystkich komputerach działa, natomiast u mnie przy insercie wywala coś takiego: "Exception in thread "main" java.lang.IllegalStateException: org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl@122db6e is closed". Aktualizowałem mavena, zmieniałem JRE, aktualizowałem IntelliJ. Błąd na pewno jest u mnie, bo wszystkim innym osobom działa. Jakieś porady co mógłbym jeszcze z tym zrobić?
  • 13
@kaervek: Wszystkie zmiany jakie miałem to revertowałem + dla pewności stworzyłem nowy projekt, gdzie wszystko miałem czyste i nienaruszone.

@zly_dzien: Nic nie zmieniałem i tak jak pisałem, powinno być okej, bo u innych osób, które mają ten sam setup wszystko działa.
@baalder363: no i fajnie

Exception leci przy rollbacku:

at org.hibernate.engine.transaction.internal.TransactionImpl.rollback(TransactionImpl.java:100)

at pl.sda.library.hibernate.dao.AccountHbmDAO.create(AccountHbmDAO.java:27)


czyli blok try się nie udał, transakcja została zrollbackowana, ale w trakcie rollbacku nie było już aktywnego połączenia z DB, więc poleciał ten wyjątek który poleciał, zamiast tego RTE z ostatniej linii

Zobacz z jakiego powodu wpada do bloku catch - jaki tam jest Exception. Bo to ci da więcej informacji dlaczego u ciebie ten kod może nie działać.
@baalder363: zerknąłem jeszcze na ten kod i tak:

tu jest sesja otwierana (try-with-resources):

try (Session session = HibernateUtil.getSessionFactory().openSession()) {


natomiast w bloku catch próbuje się wykonać

transaction.rollback();


Problemem jest to, że w przypadku jakiegokolwiek wyjątku w bloku try, blok catch wykonuje się dopiero po zamknięciu sesji (bo tak działa try-with-resources - kolejność wykonania try -> close na zasobach -> catch -> finally), więc rollback nigdy nie miał prawa tam zadziałać -
@Kw4s: Kurde, pomogłeś mi :D. W zasadzie nie wiem dokładnie co było nie tak, w każdym razie za każdym uruchomieniem aplikacji robiony był drop na bazie danych (to jest to co się tam w propertisach ustawia zdaje się), ale coś musiałem dawno temu pochrzanić ze swoją bazą bo co prawda robiło dropa, ale niepoprawnie tworzyło tabelkę tzn. nowa tabelka miała dodatkową kolumnę "latestversion", która się nie tworzyła nigdy (ale nie