Pracheer Pancholi:
私は私がDB2データベースにいくつかの従業員データを挿入し、以下そのためのコードである必要がある要件を抱えています:
@Log4j2
@Service
@Transactional
public class EmployeeServiceImpl extends EmployeeService{
@Autowired
private EmployeeDataRepository employeeDataRepository;
@Override
@Transactional(rollbackOn = {DataAccessException.class})
public void insertEmployeeData(List<Employee> employeeList){
try{
employeeDataRepository.insertEmployeeData(employeeList);
}catch(DataAccessException ex){
log.error("Exception whie inserting data in db {}",ex.getMessage());
}
}
@Log4j2
@Repository
public class EmployeeDataRepositoryImpl implements EmployeeDataRepository{
@Autowired
private DataSource dataSource;
@Value("${db.schema}")
private String schema;
@Override
public void insertEmployeeData(List<Employee> employeeList){
this.jdbcInsert = new SimpleJdbcInsert(dataSource).withTableName("Employee");
for(Employee emp : employeeList){
Map<String,Object> parameters = new HashMap<String,Object>();
parameters.put("name", emp.name);
parameters.put("age", emp.age);
parameters.put("dateOfJoining", emp.dateOfJoining);
parameters.put("address", emp.address);
parameters.put("salary", emp.salary);
jdbcInsert.execute(parameters);
log.info("Created Record Name = " + name + " Age = " + age + " dateOfJoining = "+dateOfJoining);
}
return;
}
}
スプリングデータソースプロパティのデータソースを使用して構成さに注入されるEmployeeDataRepositoryImpl
クラス。私が使用していSimpleJdbcInsert
たDB2表にデータを挿入します。国境を越えた取り扱いのために私が使用しています @Transactional(rollbackOn = {DataAccessException.class})
方法について。データは1つずつ挿入されると、何かがデシベルレベルでうまくいかないならば、それはロールバックしなければならないが、最終的にそのは起きていません。また、私はクラスレベルで注釈を入れてみましたが、運がありません。私は何をしないのです場合は私に知らせてください!
マルコBehler:
あなたはここに混ざって物事のカップルを持っています。
- (ランタイム)例外があれば春には、トランザクション・バックロールあなたの@Transactionalメソッドを介して泡。
- あなたはそれゆえ、DataAccessExceptionの例外をキャッチしている防止ロールバックを。
- rollbackOnで例外を指定する必要もありません。
このように読むべきあなたのコードは、これで十分です。
@Transactional
public void insertEmployeeData(List<Employee> employeeList){
employeeDataRepository.insertEmployeeData(employeeList);
}
@Transactionalがどのように機能するかについての詳細は、以下を参照してくださいこのリンクを。