生成的密钥可能会返回JdbcTemplate#update(PreparedStatementCreator,KeyHolder)方法。但要实现这一目标,您需要根据以下情况更改您的请求org.springframework.jdbc.core.PreparedStatementCreatorFactory.
相反,我建议使用插入简单的Jdbc插入实用类。
如果您的数据库字段与实体的字段非常相同,那么您可以简单地执行以下操作:
Number key = jdbcInsert.executeAndReturnKey(new BeanPropertySqlParameterSource(entity));
//set generated key
if (key != null){
entity.setId(key.longValue());
}
如果不是(如您的情况),那么
//define parameters
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("FIRSTNAME", pupil.getFirstname());
parameters.put("SURNAME", pupil.getSurname());
parameters.put("GIVEN_NAME", pupil.getGivenName());
parameters.put("DOB", pupil.getDob());
//execute insert
Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(parameters));
//set generated key
if (key != null){
pupil.setId(key.longValue());
}
jdbcInsert
您需要为每个实体定义一次参数,它将如下所示:
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(getJdbcTemplate());
jdbcInsert.withTableName(entityName); //e.g. "STUDENTS"
jdbcInsert.setGeneratedKeyName(idColumn); //e.g. "ID"
jdbcInsert.setColumnNames(columnNames); //e.g. Arrays.asList("FIRSTNAME", "SURNAME", "GIVEN_NAME", "DOB")