mybatis @transactional처리가 안됩니다.
- 작성자 :
- 개*자
- 작성일 :
- 2022-02-10 18:44:37
- 조회수 :
- 2,129
- 구분 :
- 개발환경 / 3.7
- 진행상태 :
- 완료
Q
1. DAO에서 insert를 반환할 때 null을 반환해줍니다.
insert(".....", param) 을 하면 데이터는 삽입되는데 결과는 null이 반환 됩니다.
이전에는 분명 1을 반환해 준걸로 기억하고 있습니다.
2. @Transactional 이 정상작동하지 않습니다.
서비스 구현체에서 에러 발생시켰을 경우 롤백이 되지 않습니다.
....ServiceImpl 의 함수에서 @Transactional을 설정해줘도 정상 작동하지 않습니다.
@Service
public class SampleDAO extends EgovAbstractDAO{
public int insertSomething(Map<String, Object> param){
return (int)insert("sample.insert", param); //여기서 nullpointer exception 발생!!!
}
}
public class SampleServiceImpl extends EgovAbstractServiceImpl implementation SampleService{
@Autowired
SampleDAO dao;
@Transactional
@Override
public testServiceFunction(Map<String, Object> param){
dao.insertSomething(Map<String, Object> param); //여기서 nullpointer exception 발생!!!
}
insertSomething()으로 정상적으로 삽입되었지만, null이 반환 됩니다. (삽입 성공시 1이 반환 되었는데 왜 이렇게 되었는지 모르겠습니다.)
또한, 롤백 되면서 데이터가 없어야 정상이지만, 그대로 남아있습니다.
아래 메시지로 보건데 롤백은 실행 된 것으로 보이나, 데이터가 쿼리 실행전으로 롤백되지 않습니다.
Initiating transaction rollback
....
Connection.rollback() returned org.apache.commons.dbcp.DelegatingConnection.rollback(DelegatingConnection.java:368)
insert(".....", param) 을 하면 데이터는 삽입되는데 결과는 null이 반환 됩니다.
이전에는 분명 1을 반환해 준걸로 기억하고 있습니다.
2. @Transactional 이 정상작동하지 않습니다.
서비스 구현체에서 에러 발생시켰을 경우 롤백이 되지 않습니다.
....ServiceImpl 의 함수에서 @Transactional을 설정해줘도 정상 작동하지 않습니다.
@Service
public class SampleDAO extends EgovAbstractDAO{
public int insertSomething(Map<String, Object> param){
return (int)insert("sample.insert", param); //여기서 nullpointer exception 발생!!!
}
}
public class SampleServiceImpl extends EgovAbstractServiceImpl implementation SampleService{
@Autowired
SampleDAO dao;
@Transactional
@Override
public testServiceFunction(Map<String, Object> param){
dao.insertSomething(Map<String, Object> param); //여기서 nullpointer exception 발생!!!
}
insertSomething()으로 정상적으로 삽입되었지만, null이 반환 됩니다. (삽입 성공시 1이 반환 되었는데 왜 이렇게 되었는지 모르겠습니다.)
또한, 롤백 되면서 데이터가 없어야 정상이지만, 그대로 남아있습니다.
아래 메시지로 보건데 롤백은 실행 된 것으로 보이나, 데이터가 쿼리 실행전으로 롤백되지 않습니다.
Initiating transaction rollback
....
Connection.rollback() returned org.apache.commons.dbcp.DelegatingConnection.rollback(DelegatingConnection.java:368)
환경정보
-
- OS 정보 : 윈도우 10
- 표준프레임워크 버전 : 3.7
- JDK(JRE) 정보 : 1.8
- WAS 정보 : tomcat 1.7
- DB 정보 : mariadb
- 기타 환경 정보 :
context-transaction은 기본 설정입니다.
실행되는 서비스 이름의 접미사에 Impl 을 불혔습니다.
A
안녕하세요.
표준프레임워크센터입니다.
표준프레임워크 데이터처리를 위한 프레임워크로
3.7 버전까지는 iBatis 방식을 사용했으며
3.8 버전부터 myBatis 방식을 사용합니다.
insert 쿼리 실행 후 iBatis 의 경우는 null 을
myBatis 의 경우 1(다건처리결과도 동일) 을
결과값으로 리턴합니다.
질문에 3.7 버전의 사용이라고 하셨으므로
iBatis를 사용중일거라 생각되므로
개발환경을 확인해보시기 바랍니다.
감사합니다.
표준프레임워크센터입니다.
표준프레임워크 데이터처리를 위한 프레임워크로
3.7 버전까지는 iBatis 방식을 사용했으며
3.8 버전부터 myBatis 방식을 사용합니다.
insert 쿼리 실행 후 iBatis 의 경우는 null 을
myBatis 의 경우 1(다건처리결과도 동일) 을
결과값으로 리턴합니다.
질문에 3.7 버전의 사용이라고 하셨으므로
iBatis를 사용중일거라 생각되므로
개발환경을 확인해보시기 바랍니다.
감사합니다.