@Transactional 시 @Rollback(value = false)와 @Commit의 차이
352
작성한 질문수 59
@Test
@Transactional
@Rollback(value = false)
void testMember() {
// given
Member member = new Member();
.....
}@Test
@Transactional
@Commit
void testMember() {
// given
Member member = new Member();
.....
}JUnit에서 테스트 할 때 @Transactional이 붙어있으면 자동으로 롤백되기 때문에 기본 동작을 방지하기 위해(테스트 후에 persist한 데이터를 확인할 수 있도록 하기 위해) @Rollback(value = false)를 사용한다고 알고있습니다.
그렇다면 @Rollback(value = false) 대신 @Commit을 사용해도 같다고 봐도 될까요?
답변 2
0
안녕하세요. Jaesang Yoon님, 공식 서포터즈 OMG입니다.
네, 동일하다고 보셔도 됩니다.
아래에서 차이를 설명드릴게요.
롤백 어노테이션의 구현 코드를 보면 boolean 타입 value의 true를 기본값으로 갖고 있습니다.
@RollBack

커밋 어노테이션은 롤백어노테이션의 value가 기본값 true가 아닌 false로 설정된 어노테이션이
별도로 추가된 어노테이션으로 보시면됩니다.
@Commit

이해하기 쉽게 함수로 비유하면 rollback의 참/거짓 상태를 기본 참인 변수를 갖는 클래스에서
이 변수 자체를 반환하는 롤백 메서드와 롤백의 상태값에 대한 역을 출력하는 커밋 메서드로 비유할 수 있을 것 같습니다 😀

감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
Jaesang Yoon님께서 질문하신 @Transactional 시 @Rollback(value = false)와 @Commit의 차이에 관련된 질문에 대해서, 스프링 프레임워크에서 제공하는 어노테이션 사용에 있어서 기본적인 차이점 및 용도를 설명드릴 수 있습니다. @Transactional 어노테이션은 테스트 메서드를 실행할 때 일어난 변경 사항이 데이터베이스에 반영되지 않도록 기본적으로 롤백을 수행합니다. 이는 수행된 테스트가 데이터베이스에 영구적인 변화를 주지 않게 하여, 테스트의 독립성을 보장합니다.
@Rollback(value = false)와 @Commit 어노테이션은 이 기본적인 롤백 동작을 수정하여, 테스트를 수행한 뒤에 데이터베이스에 데이터를 실제로 반영하고자 할 때 사용됩니다. 즉, 두 어노테이션 모두 테스트의 결과를 데이터베이스에 커밋하여 반영하게 합니다. 그러나 문맥에 따라 명시적으로 의미를 전달하는 측면에서 차이점을 가질 수 있습니다.
@Rollback(value = false)는 특히 테스트에서만 사용되는 것으로, 테스트 메서드가 종료된 이후 롤백하지 않는다를 명확히 합니다. 반면, @Commit 어노테이션은 테스트 메서드가 성공적으로 종료된 뒤 커밋을 실행하여 변경사항을 데이터베이스에 반영하도록 합니다.
두 어노테이션의 기능적인 측면에서는 같은 결과를 갖게 되며, 사용 목적에 따라 선택할 수 있습니다. 이와 관련된 더 자세한 사례와 설명을 원하신다면, 이전에 비슷한 질문에 대한 답변을 참고하실 수 있습니다.
- @Rollback(false)와 @Commit의 차이에서 김영한 강사님이 답변한 내용입니다. 이 자료는
@Commit과@Rollback(value = false)가 실제로는 같은 동작을 하는 것을 설명하고 있으며, 테스트 코드 내에서 이 두 어노테이션을 어떻게 사용하는지에 대한 좀 더 깊은 이해를 돕습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
SpringBoot 4.X에서의 Querydsl 설정
0
88
2
querydsl 오픈소스에 대한 질문
0
72
1
예제에서의 카운트 쿼리에서 join문과 where문은 필요없지 않나요?
0
109
1
Querydsl 6.X버전에 대해서 어떻게 생각하시나요?
0
317
2
여러 테이블 조인하여 통계치를 구하고자 할 때 어떤 방법이 더 효율적일까요
1
70
1
fetchResults()는 더이상 권장되지 않는다는데 맞나요?
0
160
1
querydsl sum() 메서드 없어요.
0
159
2
build 디렉터리 생성
0
136
2
자바 ORM 표준 JPA 프로그래밍 - 기본편 듣고 바로 학습해도 괜찮을까요?
0
114
2
현재 Querydsl에서 from절 서브쿼리를 지원하나요?
0
91
1
오타 제보 드립니다.
0
72
2
벌크 연산과 flush, clear
0
76
1
Run As Intellij 로 변경시 Q타입 import 불가
0
88
1
QHello import하기 문제 발생
0
147
2
등록된 함수 보는법(H2Dialect) 질문
0
68
2
5.0부터 Querydsl은 향후 fetchCount() , fetchResult() 를 지원하지 않기로 결정했다고 하는데 이에 맞는 강의
1
196
2
[환경설정 PDF 부트 3.0이후 설명 질문] build.gradle에 compileQuerydsl을 정의하지 않은 상태에서 Gradle->Tasks->other->compileQuerydsl을 클릭하라고 하는 이유가 무엇인가요??
1
200
1
querydsl 설정 문제
0
222
2
quey dsl 설정부분
0
158
2
count 쿼리 관련 질문입니다!
0
75
1
stringtemplate를 이용하여 where절 검색 방법 질문 드립니다.
0
89
1
답변부탁드리겠습니다.
0
89
2
(OrderSpecifier)관련 내용 어디있을가요
0
65
1
중급문법 벌크연산에서
0
81
2





