@Transactional 롤백 봄 부팅 응용 프로그램에서 작동하지 않는 이유는 무엇입니까?

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클래스. 내가 사용하고 SimpleJdbcInsertDB2 테이블에 데이터를 삽입 할 수 있습니다. 다국적 처리를 위해 내가 사용하고 @Transactional(rollbackOn = {DataAccessException.class})방법에. 데이터가 하나 그때를 삽입하면 뭔가 그런 다음 롤백해야하지만, 결국 일이되지 데시벨 수준에서 잘못되면. 또한 내가 클래스 레벨에서 주석을 넣어 시도했지만 운이 없다. 내가 무엇을 놓치고 있으면 알려 주시기 바랍니다?

마르코 Behler :

당신은 여기 혼합 몇 가지를 가지고있다.

  1. A (런타임) 예외가 있다면 봄, 트랜잭션 등을 롤 당신의 @Transactional 방법으로 거품.
  2. 당신은 따라서, DataAccessException과 예외를 잡고있다 방지 롤백합니다.
  3. rollbackOn에서 예외를 지정할 필요도 없다.

다음과 같이 읽어야 코드는,이 충분하다.

@Transactional
public void insertEmployeeData(List<Employee> employeeList){
  employeeDataRepository.insertEmployeeData(employeeList);
}

@Transactional 작동하는 방법에 대한 자세한 내용은 이 링크를.

추천

출처http://43.154.161.224:23101/article/api/json?id=24832&siteId=1