반응형
벌크연산과 SQL Function
쿼리를 이용하면 일정한 조건에 해당하는 데이터에 공통적으로 수정해야 하는 일이 있다.
이 때 벌크 연산을 이용한다.
벌크연산
long count = queryFactory
.update(member)
.set(member.username, "비회원")
.where(member.age.lt(28))
.execute();
- member의 age가 28 이하인 경우 username를 비회원으로 수정하는 벌크연산이다.
- query와 동일하게
update
,delete
등을 이용한다. - 벌크연산의 주의할 점은
spring data jpa
와 다르게 영속성 컨텍스트에 있는 엔티티를 무시하고 데이터베이스에 직접 실행된다.
그렇기 때문에 배치 쿼리를 실행하고 나면 영속성 컨텍스트를 초기화 하는 것이 안전하다.
SQL Function
List<String> result = queryFactory
.select(
Expressions.stringTemplate("function('replace', {0}, {1}, {2})", member.username, "member", "m")
)
.from(member)
.fetch();
Expressions.stringTemplate(...)
의 형식으로 함수 호출이 가능하다.- SQl function은 JPA처럼 Dialect에 등록된 내용만 호출할 수 있다.
org.hibernate.dialect
패키지의 각 Database별 Dialect를 통해 사용 가능한 function을 확인할 수 있다.- 사용자 정의 함수의 경우 dialect를 상속받아 새로 정의하며 사용 가능하다.
- 꼭 함수를 사용하는 것이 아닌
member.username.lower()
과 같이 ansi 표준 함수들은 querydsl이 내장하고 있기 때문에 이를 사용하는 것도 좋은 방법이다.
반응형
'Java & Kotlin > Spring Data' 카테고리의 다른 글
[QueryDSL] gradle querydsl 설정하기 (0) | 2022.05.15 |
---|---|
[QueryDSL] 페이징 연동하기 (0) | 2022.05.15 |
[QueryDSL] Spring Data JPA와 QueryDSL 사용하기 (0) | 2022.05.15 |
[QueryDSL] 동적쿼리 (0) | 2022.05.14 |
[QueryDSL] 프로젝션 (0) | 2022.05.14 |
[QueryDSL] QueryDSL 기본문법 (0) | 2022.05.11 |