inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! Querydsl

시작 - JPQL vs Querydsl

@Transactional 테스트 케이스안에 query 및 transaction 작동방법

해결된 질문

445

Brian

작성한 질문수 2

0

안녕하세요. @Transactional 테스트 케이스안에 query 및 transaction 작동방법이 이해가 안되서 문의드립니다.

 

일단 @Transactional을 테스트 케이스 붙이면 모든 change들이 테스트 완료후 롤백되는걸로 알고있습니다. 근데 제 update 메소드는 queryFactory.update() 메소드를 사용하고 있고 구글링 & chatgpt를 해본 결과 queryFactory.update()는 transaction을 커밋한다고 나왔습니다. 근데 제가 statsRepository.update() 시점 전과 후에 디버깅을 해보고 DB를 봤는데 값이 아직도 9로 나옵니다. transactional를 테스트 케이스에 안붙이면 메소드 후에 DB값이 10으로 관찰되고요.

queryfactory.update()를 통해 transaction을 커밋했으면 DB에 값이 10으로 적용 된 다음에 테스트 끝난 시점에 다시 9로 롤백되는거 아닌가요? 아니면 커밋을 안하나요?

좀 했갈려서 도와주셨으면 감사하겠습니다.

@Test
@Transactional
void updateIfMatch(){
  //given
  String Url = “bla”
  String createdAt = LocalDateTime.now()

  //when
  statsRepository.update(url, createdAt)
  Statistics stats = statsRepository.findById(8L).get()

  //then
  assertThat(stats.getRelaySuccessCount()).isEqualTo(10)
}

//statsRepository
@Transactional
public void update(String url, LocalDateTime createdAt){
  queryFactory
  .update(statistics)
  .where(whereClause)
  .execute();

  JPQLQuery<Long> subquery = JPAExpressions.select
  //etc etc
  //조인 테이블 쿼리
  BooleanExpression whereClause = statistics.id.in(subquery);
}

java jpa

답변 1

0

김영한

안녕하세요. Brian님

  1. 테스트에서 @Transactional을 사용하면 테스트 시작시에 트랜잭션을 적용하고 테스트가 끝나면 트랜잭션을 롤백해버립니다.

  2. querydsl의 update()를 사용한다고 해서 트랜잭션을 커밋하지는 않습니다.

결론적으로 테스트 시작에서 끝날 때 까지 트랜잭션은 커밋되지 않습니다.

DB에서 확인하신 부분은 이미 트랜잭션이 걸려있는 상태에서 다른 트랜잭션으로 확인을 한 것이기 때문에 확인이 어렵습니다.

테스트에서 @Commit을 추가하시면 테스트가 끝나고 나서 트랜잭션을 롤백하지 않고 커밋하기 때문에 DB에 추가된 내용을 확인할 수 있습니다.

또는 테스트에서 @Transactional을 사용하지 않고, 직접 원하는 곳에 트랜잭션을 적용해서 코드를 확인하는 것도 방법입니다.

감사합니다.

SpringBoot 4.X에서의 Querydsl 설정

0

104

2

querydsl 오픈소스에 대한 질문

1

81

1

예제에서의 카운트 쿼리에서 join문과 where문은 필요없지 않나요?

0

113

1

Querydsl 6.X버전에 대해서 어떻게 생각하시나요?

0

325

2

여러 테이블 조인하여 통계치를 구하고자 할 때 어떤 방법이 더 효율적일까요

1

73

1

fetchResults()는 더이상 권장되지 않는다는데 맞나요?

0

164

1

querydsl sum() 메서드 없어요.

0

163

2

build 디렉터리 생성

0

142

2

자바 ORM 표준 JPA 프로그래밍 - 기본편 듣고 바로 학습해도 괜찮을까요?

0

116

2

현재 Querydsl에서 from절 서브쿼리를 지원하나요?

0

94

1

오타 제보 드립니다.

0

74

2

벌크 연산과 flush, clear

0

77

1

Run As Intellij 로 변경시 Q타입 import 불가

0

90

1

QHello import하기 문제 발생

0

150

2

등록된 함수 보는법(H2Dialect) 질문

0

70

2

5.0부터 Querydsl은 향후 fetchCount() , fetchResult() 를 지원하지 않기로 결정했다고 하는데 이에 맞는 강의

1

201

2

[환경설정 PDF 부트 3.0이후 설명 질문] build.gradle에 compileQuerydsl을 정의하지 않은 상태에서 Gradle->Tasks->other->compileQuerydsl을 클릭하라고 하는 이유가 무엇인가요??

1

203

1

querydsl 설정 문제

0

223

2

quey dsl 설정부분

0

159

2

count 쿼리 관련 질문입니다!

0

75

1

stringtemplate를 이용하여 where절 검색 방법 질문 드립니다.

0

90

1

답변부탁드리겠습니다.

0

91

2

(OrderSpecifier)관련 내용 어디있을가요

0

67

1

중급문법 벌크연산에서

0

84

2