최대 1 분 소요

동기

querydsl에서 select 쿼리를 만들 때는 where절에 들어갈 파라미터 값이 null인지에 따라 자유롭게 조건을 추가할 수 있었다.
즉, 동적 쿼리를 자유롭게 작성할 수 있었는데 과연 update 쿼리에서도 set절에 자유롭게 설정이 가능한지 궁금했다!

JPAUpdateClause

아래 코드를 보면, update()도, set()JPAUpdateClause를 반환한다.
update 쿼리를 실행하려면 최종적으로 JPAUpdateClause.execute()를 호출해줘야 하고, 그 이전에는 set()을 메서드 체이닝으로 얼마든지 추가해줄 수 있다.

JPAUpdateClause clause = queryFactory
                .update(user);

JPAUpdateClause clause2 = queryFactory
                .update(user)
                .set(user.username, username)
                .set(user.email, email);

clause.execute();
clause2.execute();


얼마든지 추가해줄 수 있다면, 동적 쿼리로 작성이 가능하다는 뜻이 된다! 그렇다면 분기를 타서 쿼리를 마음껏 수정할 수 있다.
아래는 파라미터로 받은 username이 null이면 set을 하지 않고, not null이면 set을 하는 예제다.

public void updateUsername(String username) {
    JPAUpdateClause clause = queryFactory
            .update(user);
            if (username != null) {
                clause.set(user.username, username);
            }
    clause.execute();
}

Reference

카테고리:

업데이트:

댓글남기기