Cześć,
mam restowe api w spring boot. Przez postmana metoda PUT, przekazuje jsona zawierającego tylko jedno pole z klasy oraz id. Do zapisania w bd używam CrudRepository save().
W takim przypadku niestety pozostałe pola z klasy zapisuje mi nullami. Czy jest jakieś szybkie rozwiązanie aby updatować tylko to jedno pole?

- Rejestracja:ponad 5 lat
- Ostatnio:około 5 lat
- Postów:3
- Rejestracja:ponad 10 lat
- Ostatnio:6 miesięcy
- Lokalizacja:Warszawa
- Postów:3573
@Mateusz Marczak
Jak używasz Spring Data JPA robisz na 2 sposoby:
- przez operacje na encji
a)W transkacji(adnotacja Transactional albo TransactionTemplate) pobierasz encje np. przez findById
b)aktualizujesz wybrane pola w pobranej encji
c)po transakcji Ci zaktualizuje (dirty checking)
2)Stosujesz zapytania JPQL do aktualizacji:
https://www.baeldung.com/spring-data-jpa-query
Metoda save przy aktualizacji nie jest potrzebna

- Rejestracja:ponad 5 lat
- Ostatnio:około 5 lat
- Postów:3
dzięki za odpowiedzi ale w sumie to dalej nie to. Zgodnie z dokumentacją meta z CRUDRepository zachowuje się jak saveOrUpdate z hibernata, czyli jak przesyłam obiekt bez id to tworzy nowy a jak przesyłam z id to go aktualizuje. To mam ogarnięte. Problem leży w tym (chyba :) ), że jak przesyłam jsona z pominięciem jakiegoś pola z klasy, to z automatu wstawia się tam null
pobierając encje, musiałbym wiedzieć jakie pola chce aktualizować albo porównać to z przesłanym obiektem.
przy JPQL też bym już musiał wiedzieć jakie pola chce aktualizować a nie wiem jakie dostane.
- screenshot-20191121081629.png (93 KB) - ściągnięć: 135

- Rejestracja:ponad 9 lat
- Ostatnio:15 dni
- Postów:373
Mateusz Marczak napisał(a):
Problem leży w tym (chyba :) ), że jak przesyłam jsona z pominięciem jakiegoś pola z klasy, to z automatu wstawia się tam null!
Wydaje mi się że tutaj możesz mieć racje.

- Rejestracja:około 17 lat
- Ostatnio:około 11 godzin
- Postów:1875
Jak będziesz pchał surowe encje REST-em to będziesz miał takie problemy. Jeśli nie ma jakiegoś pola w requescie, to jaka tam ma być wartość, jeśli nie 0 lub null?

- Rejestracja:ponad 5 lat
- Ostatnio:około 5 lat
- Postów:3
Liczyłem na to, że przy updacie będzie to działało raczej na setowaniu poszczególnych wartości, a to co nie jest przekazane jest pomijane.
- Rejestracja:ponad 10 lat
- Ostatnio:6 miesięcy
- Lokalizacja:Warszawa
- Postów:3573
@Mateusz Marczak: jak stosujesz JPA to powinineneś stosowac również obiekty DTO które nie sa encjami!- do kontrollera musi poleć DTO i w warstwie logiki (chyba że jej nie masz) robisz save/update na bazie danych z dto

- Rejestracja:około 17 lat
- Ostatnio:około 11 godzin
- Postów:1875
Nie chcę być złośliwy czy coś, ale poświęciłbym trochę czasu na zrozumienie, co się dokładnie dzieje na poszczególnej warstwie aplikacji (HTTP, Jackson, Spring, JPA, SQL). Dzięki temu będziesz w stanie samodzielnie dojść do rozwiązania :)
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.