public long save(OrderRawEvent commonRawEvent) { StringBuilder query = new StringBuilder(); query.append(format("INSERT INTO %s ", TABLE_NAME)); query.append(" ( identifier, type, version, payload, created ) "); query.append(" VALUES ( ?, ?, ?, ?, ? ) "); KeyHolder keyHolder = new GeneratedKeyHolder(); jdbcTemplate.update(connection -> { PreparedStatement statement = connection.prepareStatement(query.toString(), Statement.RETURN_GENERATED_KEYS); int idx = 0; statement.setLong(++idx, commonRawEvent.getIdentifier()); statement.setString(++idx, commonRawEvent.getType()); statement.setLong(++idx, commonRawEvent.getVersion()); statement.setString(++idx, commonRawEvent.getPayload()); statement.setTimestamp(++idx, convertLocalDateTimeToTimestamp(commonRawEvent.getCreated())); return statement; }, keyHolder); return keyHolder.getKey().longValue(); }