기본적으로 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);
}
}
'STUDY > Spring' 카테고리의 다른 글
Spring Boot | SMTP (worksmobile 메일) (0) | 2021.10.22 |
---|---|
Spring Boot | RestTemplate PATCH 사용하기 (0) | 2021.10.19 |
Spring Boot | Spring Security Test @WithMockUser를 커스터마이징 해서 사용하자 (0) | 2021.09.24 |
Spring Boot | HandlerMethodArgumentResolver로 Authentication 정보 간단하게 받기 (0) | 2021.09.24 |
JPA | @DataJpaTest (0) | 2021.09.08 |