![[Spring-Error] java.sql.SQLException: Generated keys not requested.](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPGH9G%2FbtszLpErpzU%2F9V2xbVL9Kb0msPiNtWJ0FK%2Fimg.png)
[Spring-Error] java.sql.SQLException: Generated keys not requested.legacy/Spring2023. 11. 5. 13:09
Table of Contents
원인
DB에서 기본키를 자동으로 증가하는 전략을 사용할 때, 서버에서 DB에 등록된 키를 가져오지 못해서 발생하는 오류
코드
public Long enrolBoard(BoardEnrolDto boardEnrolDto) {
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(connection -> {
PreparedStatement stmt = connection.prepareStatement("INSERT INTO Board(title, name, content, created_date, view_cnt) VALUES(?, ?, ?, ?, ?)");
stmt.setString(1, boardEnrolDto.getTitle());
stmt.setString(2, "userA");
stmt.setString(3, boardEnrolDto.getContent());
stmt.setTimestamp(4, Timestamp.valueOf(LocalDateTime.now()));
stmt.setLong(5, 0L);
return stmt;
}, keyHolder);
return keyHolder.getKey().longValue();
}
JdbcTemplate을 사용하여 DB에 Entity를 등록함과 동시에 키를 가져오는 코드이다.
해결
PreparedStatement에서 Statement.RETURN_GENERATED_KEYS 를 추가한다.