회워중에 나이가 28살 이하인 회원들은 모두 이름을 "비회원" 으로 처리하고싶을떄,
@Test
@DisplayName("")
@Commit
void Bulkupdate() throws Exception {
//given
long count = queryFactory
.update(member)
.set(member.username, "비회원")
.where(member.age.lt(28))
.execute();
이런식으로 하면 count에는 영향을 받은 칼럼의 갯수가저장이 된다.
주의할 점
영속성 컨텍스트는 "비회원"으로 바뀌기 전으로 남아있고,
DB에는 "비회원" 으로 바꾸기때문에, 불일치가 생길 수 있음.
만약 update 하고 나서 select를 바로 하면,
--> DB보다 영속성 컨텍스트가 우선이기 때문에, 영속성 컨텍스트에 있는 내용이 우선적으로 된다.
따라서
수정 후 바로 em.flush(),em.clear()을 하는게 좋다!
그래야 영속성 컨텍스트의 값과 DB의 값이 같아짐.
---
값을 더하기/곱하기 하고싶으면
.set(member.age, member.age.add(1))
식으로 하면 됨.
오라클에는 replace 함수가 있다.
replace(컬럼명, '찾을문자', '변환문자')
replace 함수를 사용해서 특정문자 치환, 공백제거 , 탭 제거 등 그런 거를 쉽게 할 수 있다.
이를 querydsl에서도 자바 코드로 쓸 수 있다.
만약 DB에서 함수를 쓰고싶으면 H2Dialect를 상속받아서 구현하면 됨. (그럴일이 있을까??)