package com.example.spring.security.service; import java.util.List; import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Sort; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import com.example.spring.security.entity.User; import com.example.spring.security.repository.UserRepository; import jakarta.transaction.Transactional; @Service public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Override public Optional findById(Long id) { return userRepository.findById(id); } @Override public List findAll() { return userRepository.findAll(Sort.by(Sort.Direction.ASC, "username")); } @PreAuthorize("hasRole('ADMIN')") @Transactional @Override public void updateUser(Long id, String description) { // Do whatever the work needed. // ... Optional userOpt = userRepository.findById(id); User user = userOpt.get(); user.setDescription(description); // NO userRepository.save(user) IS ACTUALLY REQUIRED HERE since the method // has been annotated with @Transactional! // Transaction commits -> Hibernate issues the SQL UPDATE. } }