JDBC Spring フレームワークを使用して、Sql Server 2008 に行を挿入しようとしています。
コードは次のとおりです。
BdClass bdclass= new BdClass(BdClass.BdConfig.ConnectionString_MYHOME);
Person personaNueva = new Person();
personaNueva.setIdPerson(5);
personaNueva.setUsuario("JavaUser");
personaNueva.setClave("JavaPassword");
personaNueva.setNombre("JavaNombreUsuario");
personaNueva.setActivo("S");
personaNueva.AddPerson(bdclass);
//Person class
public void AddPerson(BdClass bdclass)
{
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put(Constantes.idperson, this.getIdperson());
parameters.put(Constantes.usuario,this.getUsuario());
parameters.put(Constantes.clave,this.getClave());
parameters.put(Constantes.nombre,this.getNombre());
parameters.put(Constantes.activo, this.getActivo());
bdclass.Insert(parameters,Constantes.Table_Name);
}
//BdClass Insert
このステップでは、IDENTITY INSERT を有効にしています
public void Insert(Map<String, Object> parameters, String TableName)
{
this.jdbcTemplate.execute("SET IDENTITY_INSERT " + TableName + " ON");
JdbcInsert = new SimpleJdbcInsert(this.jdbcTemplate).withTableName(TableName);
JdbcInsert.execute(parameters);
}
execute ステートメントを実行すると、次の例外が発生します。
原因: com.microsoft.sqlserver.jdbc.SQLServerException: IDENTITY_INSERT が OFF に設定されている場合、テーブル 'Persons' の ID 列に明示的な値を挿入できません
私はすでにSQL管理スタジオでSET IDENTITY_INSERT PERSONS ONコマンドを試しましたが、うまくいきませんでした。
編集: idperson フィールドは identityですが、パラメーターと値を渡すかどうかは関係ありません...同じエラーが発生します
編集2:
わかりました、usingColumns プロパティを使用して修正したので、すべての列を指定できます。
public void Insert(Map<String, Object> parameters, String TableName)
{
this.jdbcTemplate.execute("SET IDENTITY_INSERT " + TableName + " OFF");
JdbcInsert = new SimpleJdbcInsert(this.jdbcTemplate).withTableName(TableName)
.usingColumns(Person.Constantes.usuario,Person.Constantes.clave,
Person.Constantes.nombre,Person.Constantes.activo);
JdbcInsert.execute(parameters);
}