{"id":1834,"date":"2022-08-30T15:19:50","date_gmt":"2022-08-30T15:19:50","guid":{"rendered":"https:\/\/unknownerror.org\/index.php\/2013\/12\/02\/spring-mvc-using-generatedkeyholder-java-io-notserializableexception-collection-of-common-programming-errors\/"},"modified":"2022-08-30T15:19:50","modified_gmt":"2022-08-30T15:19:50","slug":"spring-mvc-using-generatedkeyholder-java-io-notserializableexception-collection-of-common-programming-errors","status":"publish","type":"post","link":"https:\/\/unknownerror.org\/index.php\/2022\/08\/30\/spring-mvc-using-generatedkeyholder-java-io-notserializableexception-collection-of-common-programming-errors\/","title":{"rendered":"Spring MVC using GeneratedKeyHolder() &#8211; java.io.NotSerializableException-Collection of common programming errors"},"content":{"rendered":"<p>I am trying to preform an insert into an mysql database using jdbcTemplate and GeneratedKeyHolder() for retrieving autogenerated PK colum value. However i am getting an exception. If i remove keyHolder parameter the record inserts perfectly however i am not able to get the autogenerated PK sine keyHolder was removed. The class Crime implements Serializable. Under is the code:<\/p>\n<p><strong>How do i structure the statement so i can receive the keyHolder value ?<\/strong><\/p>\n<p><strong>DAO<\/strong><\/p>\n<pre><code>KeyHolder keyHolder = new GeneratedKeyHolder();\nlogger.debug(\"In saveCrime\");\nlogger.debug(\"In saveCrime\");\nsql = \"INSERT INTO crimeTrack.tblcrimes (crimeDetails, \" +\n    \"crimeLatLocation,crimeLongLocation, crimeStreetLn1, crimeStreetLn2, crimeDate, \"+\n    \"recordedById,statusId, offenceCatId, offenceTypeId, crimeLevelId, investigatingOfficerId,crimeTime) \" +\n    \"VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)\";\n\nint save = getJdbcTemplate().update(new PreparedStatementCreator(){\n\n    public java.sql.PreparedStatement createPreparedStatement(\n        java.sql.Connection connection) throws SQLException {\n            PreparedStatement ps =(PreparedStatement) connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);\n            ps.setString(1, crime.getCrimeDetails());\n            ps.setFloat(2, (float)crime.getCrimeLatLocation());\n            ps.setFloat(3, (float)crime.getCrimeLongLocation());\n            ps.setString(4, crime.getCrimeStreetLn1());\n            ps.setString(5, crime.getCrimeStreetLn2());\n            ps.setString(6,  crime.getCrimeDate());\n            ps.setString(7, \"sim\");\n            ps.setInt(8, crime.getStatusId());\n            ps.setInt(9, crime.getOffenceCatId());\n            ps.setInt(10, crime.getOffenceTypeId());\n            ps.setInt(11, crime.getCrimeLevelId());\n            ps.setString(12, crime.getInvestigatingOfficerId());\n            ps.setString(13, crime.getCrimeTime()); \n\n            return ps;\n        }\n    },keyHolder);\n<\/code><\/pre>\n<p><strong>Error Log<\/strong><\/p>\n<pre><code>41734 [http-bio-8084-exec-4] DEBUG org.springframework.jdbc.support.SQLErrorCodesFactory  - SQL error codes for 'MySQL' found\n41734 [http-bio-8084-exec-4] DEBUG org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator  - Unable to translate SQLException with Error code '0', will now try the fallback translator\n41734 [http-bio-8084-exec-4] DEBUG org.springframework.jdbc.support.SQLStateSQLExceptionTranslator  - Extracted SQL state class 'S1' from value 'S1009'\n41735 [http-bio-8084-exec-4] DEBUG org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver  - Resolving exception from handler [public org.springframework.web.servlet.ModelAndView com.crimetrack.web.CrimeRegistrationController.handleSave(com.crimetrack.business.Crime,org.springframework.validation.BindingResult,org.springframework.ui.ModelMap,org.springframework.ui.Model) throws java.lang.Exception]: org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [INSERT INTO crimeTrack.tblcrimes (crimeRecNo,crimeDetails, crimeLatLocation,crimeLongLocation, crimeStreetLn1, crimeStreetLn2, crimeDate, recordedById,statusId, offenceCatId, offenceTypeId, crimeLevelId, investigatingOfficerId,crimeTime) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)]; Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException\n41737 [http-bio-8084-exec-4] DEBUG org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver  - Resolving exception from handler [public org.springframework.web.servlet.ModelAndView com.crimetrack.web.CrimeRegistrationController.handleSave(com.crimetrack.business.Crime,org.springframework.validation.BindingResult,org.springframework.ui.ModelMap,org.springframework.ui.Model) throws java.lang.Exception]: org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [INSERT INTO crimeTrack.tblcrimes (crimeRecNo,crimeDetails, crimeLatLocation,crimeLongLocation, crimeStreetLn1, crimeStreetLn2, crimeDate, recordedById,statusId, offenceCatId, offenceTypeId, crimeLevelId, investigatingOfficerId,crimeTime) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)]; Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException\n41737 [http-bio-8084-exec-4] DEBUG org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver  - Resolving exception from handler [public org.springframework.web.servlet.ModelAndView com.crimetrack.web.CrimeRegistrationController.handleSave(com.crimetrack.business.Crime,org.springframework.validation.BindingResult,org.springframework.ui.ModelMap,org.springframework.ui.Model) throws java.lang.Exception]: org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [INSERT INTO crimeTrack.tblcrimes (crimeRecNo,crimeDetails, crimeLatLocation,crimeLongLocation, crimeStreetLn1, crimeStreetLn2, crimeDate, recordedById,statusId, offenceCatId, offenceTypeId, crimeLevelId, investigatingOfficerId,crimeTime) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)]; Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException\n41737 [http-bio-8084-exec-4] DEBUG org.springframework.web.servlet.DispatcherServlet  - Cleared thread-bound request context: org.apache.catalina.connector.RequestFacade@26f6379c\n41737 [http-bio-8084-exec-4] DEBUG org.springframework.web.servlet.DispatcherServlet  - Could not complete request\norg.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [INSERT INTO crimeTrack.tblcrimes (crimeRecNo,crimeDetails, crimeLatLocation,crimeLongLocation, crimeStreetLn1, crimeStreetLn2, crimeDate, recordedById,statusId, offenceCatId, offenceTypeId, crimeLevelId, investigatingOfficerId,crimeTime) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)]; Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException\n    at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:107)\n    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)\n    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)\n    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)\n    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:603)\n    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:812)\n    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:868)\n    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:876)\n    at com.crimetrack.jdbc.JdbcCrimeDAO.saveCrime(JdbcCrimeDAO.java:54)\n    at com.crimetrack.service.CrimeManager.saveCrime(CrimeManager.java:18)\n    at com.crimetrack.web.CrimeRegistrationController.handleSave(CrimeRegistrationController.java:261)\n    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)\n    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)\n    at java.lang.reflect.Method.invoke(Unknown Source)\n    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)\n    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)\n    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)\n    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)\n    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)\n    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)\n    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)\n    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)\n    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)\n    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)\n    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)\n    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)\n    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)\n    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)\n    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)\n    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)\n    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)\n    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)\n    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)\n    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)\n    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)\n    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)\n    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)\n    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)\n    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)\n    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)\n    at java.lang.Thread.run(Unknown Source)\nCaused by: java.sql.SQLException: Invalid argument value: java.io.NotSerializableException\n    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)\n    at com.mysql.jdbc.PreparedStatement.setSerializableObject(PreparedStatement.java:3359)\n    at com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:3010)\n    at org.apache.commons.dbcp.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:229)\n    at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:351)\n    at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:216)\n    at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:144)\n    at org.springframework.jdbc.core.ArgPreparedStatementSetter.doSetValue(ArgPreparedStatementSetter.java:65)\n    at org.springframework.jdbc.core.ArgPreparedStatementSetter.setValues(ArgPreparedStatementSetter.java:46)\n    at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:816)\n    at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:1)\n    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:587)\n    ... 38 more\n41739 [http-bio-8084-exec-4] DEBUG org.springframework.web.context.support.XmlWebApplicationContext  - Publishing event in WebApplicationContext for namespace 'crimetrack-servlet': ServletRequestHandledEvent: url=[\/crimeTrack\/crime_registration_save.htm]; client=[0:0:0:0:0:0:0:1]; method=[POST]; servlet=[crimetrack]; session=[null]; user=[null]; time=[149ms]; status=[failed: org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [INSERT INTO crimeTrack.tblcrimes (crimeRecNo,crimeDetails, crimeLatLocation,crimeLongLocation, crimeStreetLn1, crimeStreetLn2, crimeDate, recordedById,statusId, offenceCatId, offenceTypeId, crimeLevelId, investigatingOfficerId,crimeTime) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)]; Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException]\n41739 [http-bio-8084-exec-4] DEBUG org.springframework.web.context.support.XmlWebApplicationContext  - Publishing event in Root WebApplicationContext: ServletRequestHandledEvent: url=[\/crimeTrack\/crime_registration_save.htm]; client=[0:0:0:0:0:0:0:1]; method=[POST]; servlet=[crimetrack]; session=[null]; user=[null]; time=[149ms]; status=[failed: org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [INSERT INTO crimeTrack.tblcrimes (crimeRecNo,crimeDetails, crimeLatLocation,crimeLongLocation, crimeStreetLn1, crimeStreetLn2, crimeDate, recordedById,statusId, offenceCatId, offenceTypeId, crimeLevelId, investigatingOfficerId,crimeTime) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)]; Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException]\n<\/code><\/pre>\n<ol>\n<li>\n<p>Buddy, I see what the problem. though you mentioned the reference of that example, I believe that you use the wrong method of jdbctemplate. check the api. You use a different method with that example.<\/p>\n<\/li>\n<\/ol>\n<p id=\"rop\"><small>Originally posted 2013-12-02 20:56:52. <\/small><\/p>","protected":false},"excerpt":{"rendered":"<p>I am trying to preform an insert into an mysql database using jdbcTemplate and GeneratedKeyHolder() for retrieving autogenerated PK colum value. However i am getting an exception. If i remove keyHolder parameter the record inserts perfectly however i am not able to get the autogenerated PK sine keyHolder was removed. The class Crime implements Serializable. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1834","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/1834","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/comments?post=1834"}],"version-history":[{"count":0,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/1834\/revisions"}],"wp:attachment":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/media?parent=1834"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/categories?post=1834"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/tags?post=1834"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}