JPA+ MySQL

  • Rejestracja: dni
  • Ostatnio: dni
0

Witam,

mam taki problem podczas pracy aplikacji, jak aktualizuje w bazie danych dane, to się aktualizują za pomocą merge(), jak sprawdzam w czasie jej trwania to rekord jest zmieniony. Jak zamknę aplikację to zmiana znika i zostaje stara wersja. Przy dodawania i usuwaniu rekordów nie mam takich problemów wszystko działa ok, a aktualizacja działa tylko w czasie trwania aplikacji a później znika.

J1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

Ma ktoś jakiś pomysł co może być nie tak?

ZI
  • Rejestracja: dni
  • Ostatnio: dni
0

commit ?

J1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

właśnie oto chodzi że jest tam commit.
funkcja wyglada tak
...
em.getTransaction().begin();
em.merge(encja);
em.getTransaction().commit();
em.close();

no i aktulizacja w czasie trwania programu jest widoczna na innych formatkach, ale po zamknięciu apy wprowadzona zmiana w encji znika w bazie i powraca do dawnej wersji.

  • Rejestracja: dni
  • Ostatnio: dni
0

czy przypadkiem nie otworzyłeś dwóch transakcji? Wygląda tak ze ta pierwsza zostaje zamknieta bez komita.

Koziołek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Stacktrace
  • Postów: 6822
0

Dwa pytania:

  1. samodzielnie zarządzasz transakcjami?
  2. czy masz jeden EM na aplikację czy wiele?
J1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

Cześć mam wiele EntityManagerów na aplikacje. Teraz będę próbował coś zmieniać wg porad, jak macie jakiś więcej pomysłów piszcie.

J1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

Tryb : RESOURCE_LOCAL , tworze em przez entitymanagerfactory.

Koziołek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Stacktrace
  • Postów: 6822
0

Czyli pewnie cache się nie odświeżył i przy kończeniu pracy poszła stara wersja encji z innego EM. Na początek włącz logowanie zapytań SQL i zobacz co się dzieje gdy kończysz pracę aplikacji.

J1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 17
0

Dzięki znalazłem, miałeś rację, stara wersja nie była aktulizowana podczas zamykania aplikacji, a reszta encji była aktulizowana. Dzięki za podpowiedź. I efektem tego przy mergowaniu na końcu było to, że powracała do starej wersji. Jaki byłem ślepy że tego nie zauważyłem.

To tak przy okazji napisze jakby ktoś czegoś podobnego szukał :
Jak dajecie cascade = CascadeType.ALL , to uważajcie bo się nie tylko zaktualizuje encja, którą chcecie ale także encje zależne. Może nie jest odkrywcze ale teoria teoria a w praktyce trzeba uważać na to :).

Koziołek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Stacktrace
  • Postów: 6822
0

Dlatego warto dostęp do bazy danych realizować za pośrednictwem obiektu DAO, który będzie singletonem.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.