@Transactional 시 @Rollback(value = false)와 @Commit의 차이
363
작성한 질문수 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)가 실제로는 같은 동작을 하는 것을 설명하고 있으며, 테스트 코드 내에서 이 두 어노테이션을 어떻게 사용하는지에 대한 좀 더 깊은 이해를 돕습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
join에대해 질문드립니다.
0
22
1
SpringBoot 4.X에서의 Querydsl 설정
0
166
2
querydsl 오픈소스에 대한 질문
1
102
1
예제에서의 카운트 쿼리에서 join문과 where문은 필요없지 않나요?
0
128
1
Querydsl 6.X버전에 대해서 어떻게 생각하시나요?
0
354
2
여러 테이블 조인하여 통계치를 구하고자 할 때 어떤 방법이 더 효율적일까요
1
87
1
fetchResults()는 더이상 권장되지 않는다는데 맞나요?
0
172
1
querydsl sum() 메서드 없어요.
0
170
2
build 디렉터리 생성
0
153
2
자바 ORM 표준 JPA 프로그래밍 - 기본편 듣고 바로 학습해도 괜찮을까요?
0
124
2
현재 Querydsl에서 from절 서브쿼리를 지원하나요?
0
99
1
오타 제보 드립니다.
0
79
2
벌크 연산과 flush, clear
0
85
1
Run As Intellij 로 변경시 Q타입 import 불가
0
95
1
QHello import하기 문제 발생
0
157
2
등록된 함수 보는법(H2Dialect) 질문
0
76
2
5.0부터 Querydsl은 향후 fetchCount() , fetchResult() 를 지원하지 않기로 결정했다고 하는데 이에 맞는 강의
1
209
2
[환경설정 PDF 부트 3.0이후 설명 질문] build.gradle에 compileQuerydsl을 정의하지 않은 상태에서 Gradle->Tasks->other->compileQuerydsl을 클릭하라고 하는 이유가 무엇인가요??
1
214
1
querydsl 설정 문제
0
229
2
quey dsl 설정부분
0
169
2
count 쿼리 관련 질문입니다!
0
79
1
stringtemplate를 이용하여 where절 검색 방법 질문 드립니다.
0
100
1
답변부탁드리겠습니다.
0
95
2
(OrderSpecifier)관련 내용 어디있을가요
0
68
1





