トランザクション制御
業務処理内でトランザクション制御を宣言し、例外が発生した際にデータベースをロールバックできるようにします。
実装
メソッド部で@Transactionalを宣言しています。下記コードの場合、不正な値nobを登録した場合でもロールバックが発生し、データの登録が取り消されます。
package nob.example.easyapp.service.impl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import lombok.NonNull;
import nob.example.easyapp.domain.entity.Users;
import nob.example.easyapp.repository.UsersRepository;
import nob.example.easyapp.service.UserService;
import nob.example.easyapp.service.model.RegistUserInModel;
import nob.example.easyapp.service.model.RegistUserOutModel;
/**
* UserServiceの実装クラスです。
*
* @author nob
*/
@Service
public class UserServiceImpl implements UserService {
@NonNull
private UsersRepository usersRepository;
public UserServiceImpl(UsersRepository usersRepository) {
this.usersRepository = usersRepository;
}
@Override
@Transactional(rollbackFor = Exception.class) // トランザクション制御を宣言
public RegistUserOutModel regist(RegistUserInModel inModel) throws Exception {
usersRepository.save(new Users(inModel.getName(), inModel.getPassword(), inModel.getAge()));
if (inModel.getName().equals("nob")) {
throw new Exception("Invalid name");
}
return new RegistUserOutModel(true);
}
}