java - Can't insert into Sql Server using Spring Framework SimpleJdbcInsert -


i'm trying insert row in sql server 2008 using jdbc spring framework:

here code:

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 

in step enabling 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);       } 

when running execute statement getting following exception:

caused by: com.microsoft.sqlserver.jdbc.sqlserverexception: cannot insert explicit value identity column in table 'persons' when identity_insert set off

i have tried command set identity_insert persons on in sql management studio no luck.

edit: idperson field identity, doesn't matter if pass parameter , value or not... i'm getting same error

edit 2:

ok, fixed using usingcolumns property, can specify every column:

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); }    

sql server's set identity session scoped. means must execute command set identity_insert " + tablename + " on" under same transaction using insert data.

spring jdbc template opens new connection each statement, , thats why not being able set under same session.

//connection opened --> statement executed --> connection closed this.jdbctemplate.execute("set identity_insert " + tablename + " on"); 

i think best approach not identity_insert on , following:

public void insert(map<string, object> parameters, string tablename) {           jdbcinsert = new simplejdbcinsert(this.jdbctemplate).withtablename(tablename);    //this column won't included on insert statement (it autogenerated sql server)    jdbcinsert.setgeneratedkeyname("id");    jdbcinsert.execute(parameters); }  

another alternative execute both statements under same transaction, don't think use simplejdbcinsert that.


Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

c++ - qgraphicsview horizontal scrolling always has a vertical delta -