legacy/Spring

[Spring-Error] java.sql.SQLException: Generated keys not requested.

heemang.dev 2023. 11. 5. 13:09

원인

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 를 추가한다.