DML 문이 롤백되지 않는 이유를 알아 내려고 하루 종일 낭비했습니다. 비록 내가 인터넷 에서뿐만 아니라 stackoverflow에 대한 철저한 검색을 수행했습니다 - 나는 주위에 내 머리를 감쌀 수 없습니다.@ 트랜잭션이 롤백되지 않음
try catch 나 @ExceptionHandler 또는 @ControllerAdvice를 통해 어디에서 예외를 잡으려고하지 않습니다. 내 쿼리가 롤백되지 않는 이유를 파악할 수 없습니다. 이 질문은 중복처럼 들리지만 유래의 다른 게시물 중 어느 것도
spring.xml 내 문제가 해결되지 수
<bean id="employeeImpl" class="org.daoImpl.EmployeeImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
컨트롤러
@RequestMapping(value = "/formSubmit", method = RequestMethod.POST)
public ModelAndView handleForm(@ModelAttribute("employee") Employee employee) {
ModelAndView modelAndView = new ModelAndView("Success");
employeeImpl.insertEmployee(employee);
return modelAndView;
}
그리고 롤백해야 할 마지막 방법
@Transactional(rollbackFor=RuntimeException.class)
public void insertEmployee(Employee emp) {
String SQL = "insert into employee values(?,?,?,?,?)";
getJdbcTemplate().update(SQL, new Object[] { emp.getId(),emp.getFname());
throw new RuntimeException("I am throwing you out!");
}
저는 데이터베이스를 MySQL로 사용하고 있습니다.
런타임 예외가 발생 된 후에도 삽입 쿼리가 데이터베이스에 지속되므로 롤백해야합니다. 누군가 실종 된 부분을 말해 줄 수 있습니까?
RunTimeException을 명시 적으로 지정할 필요는 없습니다. 기본 데이터베이스와 엔진이 무엇인지 궁금하십니까? –
트랜잭션을 지원하지 않는 MyISAM 엔진을 사용하고있을 가능성을 배제하고 싶습니다. –
MyISAM 엔진을 사용합니다. 아마도 작동하지 않는 이유 일 것입니다. InnoDB를 엔진으로 사용하는 테이블을 만들고 다시 시도해 보겠습니다. 고마워. TJ. –