Ответ
Для сохранения (вставки или обновления) сущности в 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);
}
}