Update za pomocą JPA

0

Cześć,

Chciałbym zapytać w jaki elegancki sposób rozwiązalibyście następującą rzecz (design pattern, jakaś podpowiedź etc.).

a) dostajemy w kontrolerze dane pochodzące z formularza i opakowane w obiekt Story

@RequestMapping(value = "/backlog/save", method = RequestMethod.POST)
    public String processStoryRequest(@ModelAttribute("story") Story story) {
    }

b) Chcemy uaktualnić dane na bazie za pomocą JPA, w tym przypadku za pomocą JpaRepository (Spring)

Problem w tym, że nie chcemy nadpisać danych, które nie są zarządzane przez ten formularz. Formularz pozwala na nadpisanie kilku pól, a wywołanie JpaRepository.save

storyRepository.save(story);

nadpisze NULL-ami dane, które przyszły z formularza.

Wygląda na to, że przydałoby się pobrać obiekt za pomocą metody JpaRepository.findById, a następnie przejechać po nim IF-ami i sprawdzić czy dane się zmieniły za pomocą porównania obiektu otrzymanego JPA z tym, który wpadł jako opakowanie formularza..

Chciałbym zapytać jak to ładniej rozwiązać.

0

To akurat jest (przynajmniej według mnie i z tego co wiem) dosyć powszechny problem - co mamy zrobić jak dostaniemy w requeście np jsona z użytkownikiem

{
   username: "User1"
}

bez hasła - system powinien ustawić hasło na null, czy zmienić tylko username? W REST można to rozróżnić metodami HTTP: PUT i PATCH.

To już zależy od konwencji. Ja do tej pory spotkałem się raczej z tym że wszystko nadpisujemy. Jedyne co bym ci radził to mieć dwa oddzielne mapowania na POST (do tworzenia) i PUT (do updejtu)

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