inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! Querydsl

수정, 삭제 벌크 연산

@Transactional 시 @Rollback(value = false)와 @Commit의 차이

352

Jaesang Yoon

작성한 질문수 59

0

@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을 사용해도 같다고 봐도 될까요?

java jpa

답변 2

0

OMG

안녕하세요. Jaesang Yoon님, 공식 서포터즈 OMG입니다.

네, 동일하다고 보셔도 됩니다.

아래에서 차이를 설명드릴게요.

롤백 어노테이션의 구현 코드를 보면 boolean 타입 value의 true를 기본값으로 갖고 있습니다.

@RollBack

image

커밋 어노테이션은 롤백어노테이션의 value가 기본값 true가 아닌 false로 설정된 어노테이션이

별도로 추가된 어노테이션으로 보시면됩니다.

@Commit

image

이해하기 쉽게 함수로 비유하면 rollback의 참/거짓 상태를 기본 참인 변수를 갖는 클래스에서

이 변수 자체를 반환하는 롤백 메서드와 롤백의 상태값에 대한 역을 출력하는 커밋 메서드로 비유할 수 있을 것 같습니다 😀

image

 

감사합니다.

0

Jaesang Yoon

결국 Commit 애너테이션은 Rollback 애너테이션의 멤버변수에 논리부정연산자를 붙여준것과 같군요 ㅎㅎㅎㅎ 오늘 두번이나 뵙네요!! 감사합니다 🙂

0

OMG

네 맞습니다 ^^

강의 수강 중 궁금한 사항은 언제든 질문 남겨주세요 😀

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

Jaesang Yoon님께서 질문하신 @Transactional@Rollback(value = false)@Commit의 차이에 관련된 질문에 대해서, 스프링 프레임워크에서 제공하는 어노테이션 사용에 있어서 기본적인 차이점 및 용도를 설명드릴 수 있습니다. @Transactional 어노테이션은 테스트 메서드를 실행할 때 일어난 변경 사항이 데이터베이스에 반영되지 않도록 기본적으로 롤백을 수행합니다. 이는 수행된 테스트가 데이터베이스에 영구적인 변화를 주지 않게 하여, 테스트의 독립성을 보장합니다.

@Rollback(value = false)@Commit 어노테이션은 이 기본적인 롤백 동작을 수정하여, 테스트를 수행한 뒤에 데이터베이스에 데이터를 실제로 반영하고자 할 때 사용됩니다. 즉, 두 어노테이션 모두 테스트의 결과를 데이터베이스에 커밋하여 반영하게 합니다. 그러나 문맥에 따라 명시적으로 의미를 전달하는 측면에서 차이점을 가질 수 있습니다.

@Rollback(value = false)는 특히 테스트에서만 사용되는 것으로, 테스트 메서드가 종료된 이후 롤백하지 않는다를 명확히 합니다. 반면, @Commit 어노테이션은 테스트 메서드가 성공적으로 종료된 뒤 커밋을 실행하여 변경사항을 데이터베이스에 반영하도록 합니다.

두 어노테이션의 기능적인 측면에서는 같은 결과를 갖게 되며, 사용 목적에 따라 선택할 수 있습니다. 이와 관련된 더 자세한 사례와 설명을 원하신다면, 이전에 비슷한 질문에 대한 답변을 참고하실 수 있습니다.

  • @Rollback(false)와 @Commit의 차이에서 김영한 강사님이 답변한 내용입니다. 이 자료는 @Commit@Rollback(value = false)가 실제로는 같은 동작을 하는 것을 설명하고 있으며, 테스트 코드 내에서 이 두 어노테이션을 어떻게 사용하는지에 대한 좀 더 깊은 이해를 돕습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

Jaesang Yoon

지식공유자님의 답변을 기다립니다.

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