본문 바로가기

STUDY/Spring

Spring Boot | JPA사용 중 기본키를 UPDATE해야 할 때..

기본적으로 Primary key를 변경한다는 것이 말이안되지만..
레거시 디비로 디비 구조를 변경할 수 없는 상황이기 떄문에 부득이하게 PK값을 변경하게 되었다.


JPA에서는 기본키를 변경할 수 없다. 기본키 값을 변경하고자 한다면 JDBCTemplate이나 MyBatis등으로 우회해야 한다.
MyBatis가 사용하기에는 더 편하지만, 그렇게 되면 또 라이브러리를 추가해야 하기 때문에 JDBC를 사용하기로 했다.

사용 예시

name, addr, age라는 값을 조합한 복합키가 기본키로 사용되고, 이 값을 수정할 수 있다고 가정한다.


Repository는 분리해서 작성한다.
먼저 인터페이스를 작성하고,

public interface MemberJdbcRepository {
    int update(String name, String addr, int age, UserUpdateDto updateDto);
}

구현체를 작성한다. @Repository애노테이션을 붙여 빈으로 등록했다.
SQL 작성 시 띄어쓰기와 파라미터 순서에 주의해야 한다.

@Repository
public clss MemberJdbcRepositoryImpl implements MemberJdbcReppsitory {

    private final JdbcTemplate jdbcTemplate;

    public MemberJdbcRepositoryImpl(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public int updqte(String name, String addr, int age, UserUpdateDto updateDto) {

        String sql = "UPDATE USERS SET NAME = ?, ADDR = ?, AGE = ?"
                + "WHERE NAME = ? AND ADDR = ?, AGE = ?";

        return jdbcTemplate.update(sql, updateDto.getName(), updateDto.getAddr(), updateDto.getAge(),
                                    name, addr, age);


    }
}