[
https://hibernate.onjira.com/browse/HHH-6815?page=com.atlassian.jira.plug...
]
Guenther Demetz edited comment on HHH-6815 at 3/20/12 2:02 AM:
---------------------------------------------------------------
Hi,
I'm not agree with this kind of bugfix:
In my opinion a proper mapping has to provide full value range functionality,
expressed in other words I mean that for a byte all possible values from -256 until 255
must be supported.
I'm aware of the fact that java.lang.byte is signed [-128;+127] whilst its
correspondent database type TINYINT is unsigned [0;255], but this is a lesser problem and
I believe that Hibernate developers were aware of this fact when they implemented the
mapping for the byte.
Anyway, until Hibernate4.0.0CR5 with the official SQLServer driver it was possible to do:
1. define in java byte number = -10;
2. write this byte to database
3. SQLServerDriver stores TINYINT value 246
4. read again value from database
5. returned byte value == -10 (thus full range of byte is supported, YES!)
Now with Hibernate4.0.0.CR6
1. define in java byte number = -10;
2. try to write this byte to database, now following exception raises:
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Arithmetic overflow error for
data type tinyint, value = -10.
at
com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
at
com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493)
at
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:390)
at
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at
com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at
com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
at
com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
at
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:308)
...
I had a very similar discussion with a bugfix in the JDTs-Driver, see:
http://sourceforge.net/tracker/?func=detail&aid=2945960&group_id=...
best regards
G.Demetz
was (Author: pb00067):
Hi,
I'm not agree with this kind of bugfix:
In my opinion a proper mapping has to provide full value range functionality (!!!),
that means for a byte that all possible values from -256 until 255 must be supported.
I'm aware of the fact that java.lang.byte is signed [-128;+127] whilst its
correspondent database type TINYINT is unsigned [0;255], but this is a lesser problem and
I believe that Hibernate developers were aware of this fact when they implemented the
mapping for the byte.
Anyway, until Hibernate4.0.0CR5 with the official SQLServer driver it was possible to do:
1. define in java byte number = -10;
2. write this byte to database
3. SQLServerDriver stores TINYINT value 246
4. read again value from database
5. returned byte value == -10 (thus full range of byte is supported, YES!)
Now with Hibernate4.0.0.CR6
1. define in java byte number = -10;
2. try to write this byte to database, now following exception raises:
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Arithmetic overflow error for
data type tinyint, value = -10.
at
com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:197)
at
com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1493)
at
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:390)
at
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at
com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at
com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
at
com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
at
com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(SQLServerPreparedStatement.java:308)
...
I had a very similar discussion with a bugfix in the JDTs-Driver, see:
http://sourceforge.net/tracker/?func=detail&aid=2945960&group_id=...
best regards
G.Demetz
ByteTest fails on SQL Server due to driver dropping negative sign due
to TINYINT data type
------------------------------------------------------------------------------------------
Key: HHH-6815
URL:
https://hibernate.onjira.com/browse/HHH-6815
Project: Hibernate ORM
Issue Type: Bug
Components: core
Affects Versions: 4.0.0.CR5
Environment: MS SQL Server
Reporter: John Verhaeg
Assignee: John Verhaeg
Fix For: 4.0.0.CR6
The range for a TINYINT on SQL Server is 0-255, and because we're starting with a
byte value, the driver automatically treats it as if it were updating a TINYINT column,
even though the actual column being updated is a SMALLINT.
--
This message is automatically generated by JIRA.
For more information on JIRA, see:
http://www.atlassian.com/software/jira