inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! Querydsl

querydsl 로 @CreationTimestamp 사용이 가능한가요?

해결된 질문

457

Dalsoft Dev

작성한 질문수 3

0

안녕하세요. 강의를 보고 querydsl 을 실무에 적용하고자 학습중이었습니다. 

실제로 적용하고 querydsl 로 업데이트 쿼리를 만들어 시도하니 정상적으로 작동하긴 했지만

Entity에 정의된 @UpdateTimestamp 라던가 Audit를 이용한 @LastModified가 무시되는걸로 확인됐습니다.

혹시나 해서 테스트코드를 짜보니, 엔터티를 검색하여 가져온 다음 set을 하는 경우엔 위의 기능들이 동작했지만

querydsl 의 update....execute() 를 사용할 경우 안되더군요.

querydsl 을 사용하여 저 기능들을  활용할 방법이 있을까요? 만약 없다면 어떻게 해야하나요?

참고로 현재 사용중인 프로젝트 버전은 스프링부트 1.5.8 이며 JPA 2.1 , Hibernate는 5.2.18, querydsl 4.1.3 버전입니다.

java JPA

답변 2

2

김영한

안녕하세요. edu님

JPA에서는 엔티티를 직접 변경해서 업데이트 하는 방법이 있고, JPQL을 사용해서 업데이트 하는 방법도 있습니다.

이렇게 JPQL을 사용해서 엔티티를 통하지 않고, 직접 업데이트 하는 것을  벌크연산이라 합니다.

Querydsl은 결국 JPQL을 실행하는 것이기 때문에 JPQL을 사용해서 업데이트 하는 벌크 연산 기능을 사용한 것 입니다.

벌크 연산은 엔티티를 통하지 않고 DB에 직접 반영하기 때문에 Entity에 정의된 모든 이벤트가 무시됩니다!

(@UpdateTimestamp, @LastModified는 다 이벤트를 통해서 실행됩니다.)

JPA에서 엔티티의 변경은 엔티티의 값을 수정해서, 변경감지에 의해서 변경하도록 개발하셔야 합니다. 벌크연산은 꼭 성능을 최적화해야 하는 등의 어쩔 수 없는 경우에만 사용하셔야 합니다. 그리고 벌크 연산을 사용하면 @UpdateTimestamp, @LastModified 등의 값도 직접 벌크연산에서 업데이트 해주셔야 합니다.

벌크연산에 대한 더 자세한 내용과 주의점은

JPA 기본편에 있는

객체지향 쿼리 언어2 - 중급 문법 -> 벌크연산 편을 참고해주세요^^

1

Dalsoft Dev

정말 감사합니다 ㅎㅎㅎ 영속성을 이용할때만 동작하는걸 보고 어렴풋이 그러지 않을까하긴 했는데 어디에도 확신시켜 줄

문서나 이야기를 찾지 못했었거든요 ㅠㅠ 그래서 불가능한게 아닌데 저만 이상한건가 했습니다.

update 이후 영속성 객체에 flush()해줘야 한다는 말씀 주의깊게 들었습니다!

SpringBoot 4.X에서의 Querydsl 설정

0

84

2

querydsl 오픈소스에 대한 질문

0

70

1

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

0

108

1

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

0

316

2

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

1

68

1

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

0

160

1

querydsl sum() 메서드 없어요.

0

158

2

build 디렉터리 생성

0

135

2

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

0

113

2

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

0

90

1

오타 제보 드립니다.

0

70

2

벌크 연산과 flush, clear

0

76

1

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

0

87

1

QHello import하기 문제 발생

0

147

2

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

0

68

2

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

1

195

2

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

1

200

1

querydsl 설정 문제

0

222

2

quey dsl 설정부분

0

157

2

count 쿼리 관련 질문입니다!

0

75

1

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

0

89

1

답변부탁드리겠습니다.

0

89

2

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

0

64

1

중급문법 벌크연산에서

0

81

2