기본적으로 사용하는 트랜잭션 처리가
try {
sqlMap.startTransaction()
Employee emp2 = new Employee();
// ...set emp2 data
Integer generatedKey = (Integer) sqlMap.insert ("insertEmployee", emp2);
emp2.setFavouriteColour ("green");
sqlMap.update("updateEmployee", emp2);
sqlMap.commitTransaction();
}catch(Exception e){
sqlMap.getCurrentConnection().rollback();
e.printStackTrace();
throw e;
} finally {
sqlMap.endTransaction();
}
위처런 startTransaction 과 endTransaction 을 사용하는 방식인데.
아무리 해도. 적용이 되지 않는다...
분명히 rollback 도 타는데 말이다.
검색질 중에 http://javastore.tistory.com/103 포스팅의 도움으로 해결.
applicationContext.xml 에 아래와 같이 추가한다.
daoImpl.java 에는 아래와 같이 setter를 만들어준다.
@Autowired
private TransactionTemplate transactionTemplate;
public void setTransactionTemplate(TransactionTemplate transactionTemplate){
this.transactionTemplate = transactionTemplate;
}
메서드 부분은 아래와 같다.
private int saveCaseLowReal(HashMap hmap) throws Exception {
ghmap = hmap;
boolean result = false;
result = (Boolean)transactionTemplate.execute( new TransactionCallback() {
public Object doInTransaction(TransactionStatus status) {
try {
/*인서트 로직.*/
return true;
}catch (Exception e){
e.printStackTrace();
status.setRollbackOnly();
return false;
}
}
});
}
대략의 로직으로 보아 excute 하기 전에 true인지 false 인지 판별해서 던져주는듯 하지만..
불편하다...-_-;;;;;
이거보다 좋은 방법 있으신분은 링크를 댓글로 Plzzzzzzz..... ㅠㅠ
댓글 없음:
댓글 쓰기