Cześć,
Staram się zgłębić temat transakcji na podstawie przykładkowego projektu stworzonego przez programistów springa -> link do projektu na githubie
Mamy tam napisany serwis jak poniżej.
Nie mogę zrozumieć dlaczego użyto tutaj @Transactional
skoro jest tylko jeden insert do bazy danych.
Czytałem, że transakcji powinno się używać tam gdzie np. mamy kilka insertów do bazy i chcemy aby wykonały się wszystkie albo żaden.
package org.springframework.samples.petclinic.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.samples.petclinic.model.User;
import org.springframework.samples.petclinic.model.Role;
import org.springframework.samples.petclinic.repository.UserRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Override
@Transactional
public void saveUser(User user) {
if(user.getRoles() == null || user.getRoles().isEmpty()) {
throw new IllegalArgumentException("User must have at least a role set!");
}
for (Role role : user.getRoles()) {
if(!role.getName().startsWith("ROLE_")) {
role.setName("ROLE_" + role.getName());
}
if(role.getUser() == null) {
role.setUser(user);
}
}
userRepository.save(user);
}
}