Spring JPA - modyfikacja zapisanego obiektu

Spring JPA - modyfikacja zapisanego obiektu
OR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

Cześć
Zastanawia mnie czy sytuacja w której następuje zapisanie obiektu do bazy danych, a następnie zmodyfikuje się obiekt spowoduje zapisanie zmiany do bazy (nie mogę teraz sprawdzić tego żywo, a mnie to intryguje)? Coś w stylu poniższego:

Kopiuj
public void savePerson(){
Person p = new Person();
p.setName("Jan");
p.setAge(44);
personRepository.save(p);
p.setName("Aldona"); // co się wtedy wydarzy?
}
S9
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 3573
0

Jeśli jest @transactional to tak... (no chyba że to tylko readOnly :D )

DamianSn
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 52
0

Jeśli masz tą metodę oznaczoną adnotacją @Transactional ( pamiętaj, żeby była publiczna ) to ten personRepository.save(p) nie jest potrzebny. Jeśli nie masz to p.setName("Aldona") do bazy nie dotrze.

jarekr000000
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: U krasnoludów - pod górą
  • Postów: 4712
4

Jeszcze tylko trzeba pamiętać, że ten @Transactional to musi być na publicznej metodzie.
A obiekt (this) musi być beanem zainstancjonowanym przez Spinga. (nie przez new)
No i savePerson nie może być wywołane z tego samego beana (this.savePerson) - chyba, że używasz aspectJ wtedy może.
No i @Transactional musi być ze springa. Ten z CDI (inny pakiet) zadziała tylko o ile nie zapomnisz dodać jara z CDI do projektu.
No i musi to byc wywołane z wątku zarządzanego przez Spring (czyli żadne własne executory, new Thread() , parallelStream itp.).

Proste. Powodzenia.

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.