Zła data podczas zapisu do bazy

Zła data podczas zapisu do bazy
Belka
  • Rejestracja:prawie 8 lat
  • Ostatnio:2 dni
  • Lokalizacja:PL
  • Postów:452
0

Hej,
mam dziwny problem. Otóż posiadam w aplikacji encję reprezentującą następujące po sobie dni. Każdy element posiada kilka pół, które nie mają znaczenia w tym problemie, oraz pole date, które jest unique.

Poprzez UI udostępniam możliwość modyfikacji pół obiektu. Problem jednak występuje, kiedy próbuję zapisać zmodyfikowany obiekt do bazy. Dostaję exception o takiej treści:

Kopiuj
Duplicate entry '2019-07-26' for key 'work_day_workday_date_uindex'

Próbuję zaktualizować encję dnia dzisiejszego, ale jak widać podczas próby update aplikacja słusznie zwraca uwagę, że chcę zduplikować istniejącą już w bazie datę. I słusznie mi na to nie pozwala, lecz ja wcale tego zrobić nie chcę. Pobieram z bazy prawidłowy dzień, zmieniam właściwość inną niż data i chcę zapisać zupdatowany obiekt. Z ciekawości wypisałem sobie wszystkie właściwości obiektu tuż przed zapisaniem i tam data jest prawidłowa:

Kopiuj
WorkDay{id=296, date=2019-07-27, workingTime=8,....

W ramach testów wyłączyłem też na chwilę wymóg unikalności tej kolumny i udało mi się zaktualizować obiekt, lecz rzeczywiście apka mi nadpisuje niejawnie datę na 2019-07-26 :(
Ktoś ma jakiś pomysł, poradę, wskazówkę, cokolwiek - dlaczego tak się dzieje? Czemu data jest niewłaściwa o ten jeden dzień? I kiedy ona się próbuje nadpisać na wczorajszą?

Data w kodzie jest typu LocalDate. Korzystam ze Spring Data.

Z góry dzięki i pozdrawiam!

edytowany 1x, ostatnio: Belka
AK
kolumnę masz rzeczywiście datową, czy kombinacje ze stringiem?
AK
zaraz koledzy upomną się o kod, i słusznie
Belka
w kodzie Javowym data jest typu LocalDate
gk1982
może trzeba wyczyścić DatabaseCache
Belka
  • Rejestracja:prawie 8 lat
  • Ostatnio:2 dni
  • Lokalizacja:PL
  • Postów:452
0

Ogarnąłem to, wszystko działa, ale dla potomnych zostawię informację o tym, co zrobiłem:

W SpringBootowych application.properties z jdbc.datasource.url wyrzuciłem

Kopiuj
&serverTimezone=UTC

W bazie (MySQL8) wklepałem taką querkę:

Kopiuj
SET GLOBAL time_zone = '+02:00'
AK
dlaczego mam wrażenie, że przypudrowałeś problem
Belka
Co znaczy "przypudrować problem" w tym kontekście?
danek
nie rozwiązałeś problemu, tylko załatałeś taśmą objaw ;)
Belka
W sumie jest to możliwe, tak więc jeżeli znajdzie się ktoś, kto będzie miał lepsze rozwiązanie niż moje, to chętnie przyjmę je do wiadomości i wdrożę u siebie :)
danek
  • Rejestracja:ponad 10 lat
  • Ostatnio:8 miesięcy
  • Lokalizacja:Poznań
  • Postów:797
0

Sprawdz:
-jak dokładnie wygląda kolumna w bazie
-jaki dokładnie obiekt zapisujesz


Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
Haste - mała biblioteka do testów z czasem.
Belka
  • Rejestracja:prawie 8 lat
  • Ostatnio:2 dni
  • Lokalizacja:PL
  • Postów:452
0
danek napisał(a):

Sprawdz:
-jak dokładnie wygląda kolumna w bazie
-jaki dokładnie obiekt zapisujesz

Kolumna w bazie ma typ date. Właściwość w obiekcie encji to typ LocalDate. Rzecz w tym, że podczas update'u elementu w bazie w ogóle nie tykam pola z datą. Nie mam żadnych triggerów itd, żeby coś się modyfikowało niejawnie. Po prostu tak jakby data przeskakiwała. Po przegrzebaniu stacka znalazłem doraźne rozwiązanie, które umieściłem powyżej.

EDIT: Dzisiaj znowu nie działa :(

edytowany 1x, ostatnio: Belka

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.