2017-03-10 1 views
0

ich meine Anwendung von 3.2 bis 5.2.8 bin migrieren. Ich habe fast alles außer dieser merkwürdigen Ausnahme aussortiert. AuchHibernate Migration 3.2 bis 5.2.8: SQLServerException: Der Wert wird für die Parameternummer nicht gesetzt

Caused by: org.hibernate.exception.GenericJDBCException: could not execute statement 
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:208) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:45) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3188) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:3067) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3447) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:145) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:586) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:460) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:337) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1428) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The value is not set for the parameter number 6. 
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190) ~[sqljdbc4.jar!/:?] 
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.buildParamTypeDefinitions(SQLServerPreparedStatement.java:260) ~[sqljdbc4.jar!/:?] 
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.buildPreparedStrings(SQLServerPreparedStatement.java:219) ~[sqljdbc4.jar!/:?] 
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doPrepExec(SQLServerPreparedStatement.java:612) ~[sqljdbc4.jar!/:?] 
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:400) ~[sqljdbc4.jar!/:?] 
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350) ~[sqljdbc4.jar!/:?] 
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696) ~[sqljdbc4.jar!/:?] 
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715) ~[sqljdbc4.jar!/:?] 
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180) ~[sqljdbc4.jar!/:?] 
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155) ~[sqljdbc4.jar!/:?] 
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:314) ~[sqljdbc4.jar!/:?] 
at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:493) ~[?:?] 
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:205) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:45) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3188) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:3067) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:3447) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:145) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:586) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:460) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:337) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 
at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1428) ~[hibernate-core-5.2.8.Final.jar:5.2.8.Final] 

Die Abfrage ist

update TAB_A set COL1=?,COL2=?,COL3=?,COL4=?,COL5=?,COL6=?,COL7=?,COL8=?,COL9=?,COL10=? 
where ID=? and COL1=? 

ich das gleiche Problem für einfache SELECT-Anweisungen zu sehen.

Dies ist eine funktionierende Anwendung auf 5.2 migriert, so alles funktionierte in 3.2. Irgendeine Idee was vermisse ich? Bitte helfen Sie.

+0

Bitte fügen Sie die hql-Abfrage, die diese Anweisung ausführt .. mit Parameter Einstellung etc .. –

+0

Hallo @MaciejKowalski die SQL ich gebucht wurde von der saveOrUpdate (Entität) -Methode generiert. Ich habe nicht die HQL dafür. Außerdem habe ich heute bemerkt, dass es kein Problem gibt, wenn ich setMaxResults zu den ausgewählten HQLs auskommentiere. Irgendeine Idee warum diese Änderung im Verhalten? Aber ich brauche aus Leistungsgründen setMaxResults. – Nik

Antwort

0

Es stellte sich heraus, ein Benutzerfehler auf meiner Seite zu sein. Ich hatte einen benutzerdefinierten UserType in der Mapping-Datei definiert und während des Hibernate-Upgrades ließ ich das neue nullSafeGet/Set nicht implementiert.

Wie ich herausgefunden habe? Das Debuggen der SQL-Treiberquelle zeigte, dass einer der benutzerdefinierten Typen in der vorbereiteten Anweisung nicht festgelegt wurde.

Vielen Dank für die Antwort.

Verwandte Themen