Zła data podczas zapisu do bazy

Odpowiedz Nowy wątek
2019-07-27 15:56
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:

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:

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, 2019-07-27 16:00
kolumnę masz rzeczywiście datową, czy kombinacje ze stringiem? - AnyKtokolwiek 2019-07-27 15:58
zaraz koledzy upomną się o kod, i słusznie - AnyKtokolwiek 2019-07-27 15:59
w kodzie Javowym data jest typu LocalDate - Belka 2019-07-27 15:59
może trzeba wyczyścić DatabaseCache - gk1982 2019-07-27 17:09

Pozostało 580 znaków

2019-07-27 17:52
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

&serverTimezone=UTC

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

SET GLOBAL time_zone = '+02:00'
dlaczego mam wrażenie, że przypudrowałeś problem - AnyKtokolwiek 2019-07-27 18:11
Co znaczy "przypudrować problem" w tym kontekście? - Belka 2019-07-27 18:11
nie rozwiązałeś problemu, tylko załatałeś taśmą objaw ;) - danek 2019-07-27 18:12
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 :) - Belka 2019-07-27 18:13

Pozostało 580 znaków

2019-07-27 18:13
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.

Pozostało 580 znaków

2019-07-27 18:15
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, 2019-07-28 14:42

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0