Какой метод используется для вставки данных в Spring Data JPA Repository?

«Какой метод используется для вставки данных в Spring Data JPA Repository?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для сохранения (вставки или обновления) сущности в Spring Data JPA используется метод save() (или saveAll() для пакетной операции), унаследованный от интерфейсов CrudRepository или JpaRepository.

Как работает save():

  • Если у сущности ID равен null (или 0 для примитивов) — выполняется EntityManager.persist(), создается новая запись в БД.
  • Если ID уже существует — выполняется EntityManager.merge(), существующая запись обновляется.
  • Метод возвращает управляемую сущность (с заполненным ID после вставки).

Пример:

public interface UserRepository extends JpaRepository<User, Long> {}

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public User createUser(String name, String email) {
        User newUser = new User(); // ID = null
        newUser.setName(name);
        newUser.setEmail(email);
        // Вставка новой записи
        return userRepository.save(newUser); // ID будет заполнен
    }

    public void updateUser(User user) {
        // Обновление существующей записи (user.id != null)
        userRepository.save(user);
    }

    public void createUsersBatch(List<User> users) {
        // Пакетная вставка (более эффективно для множества записей)
        userRepository.saveAll(users);
    }
}