기본적으로 사용하는 트랜잭션 처리가
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..... ㅠㅠ
댓글 없음:
댓글 쓰기