You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Database field is defined as NUMBER(1,0).
Model object with a boolean field is mapped to parameters via SqlParameterSourceUtil.createBatch().
In version 3.2.2.RELEASE StatementCreationUtils.javaTypeToSqlTypeMap had no mapping for java boolean (more precisely it was commented out) and was working fine. This resulted in StatementCreationUtils.setValue() to execute ps.setObject(paramIndex, inValue).
After boolean mapping was uncommented ps.setObject(paramIndex, inValue, sqlType) is used.
Oracle doesn't have proper matching boolean type, however driver is smart enough to do automatic conversion from boolean to NUMBER.
Therefore following statements are valid:
ps.setObject(1, true);
ps.setBoolean(1, true);
ps.setObject(1, true, Types.NUMERIC); //very narrow-minded, works for this particular case but not generic enough
What is currently done:
ps.setObject(1, true, Types.BOOLEAN);
Thanks for raising this! We're explicitly calling PreparedStatement.setBoolean for Types.BOOLEAN now, which seems to be a sensible processing path in any case.
Igor Voshkulat opened SPR-14116 and commented
Database field is defined as NUMBER(1,0).
Model object with a boolean field is mapped to parameters via SqlParameterSourceUtil.createBatch().
In version 3.2.2.RELEASE StatementCreationUtils.javaTypeToSqlTypeMap had no mapping for java boolean (more precisely it was commented out) and was working fine. This resulted in StatementCreationUtils.setValue() to execute ps.setObject(paramIndex, inValue).
After boolean mapping was uncommented ps.setObject(paramIndex, inValue, sqlType) is used.
Oracle doesn't have proper matching boolean type, however driver is smart enough to do automatic conversion from boolean to NUMBER.
Therefore following statements are valid:
ps.setObject(1, true);
ps.setBoolean(1, true);
ps.setObject(1, true, Types.NUMERIC); //very narrow-minded, works for this particular case but not generic enough
What is currently done:
ps.setObject(1, true, Types.BOOLEAN);
Which fails with invalid column type 17004.
Affects: 4.2.5
Issue Links:
Referenced from: commits 797f5db, 6b0f26c
The text was updated successfully, but these errors were encountered: