[hibernate-dev] ResultCheckStyle.PARAM does not work with PostgreSQL
Julius Stroffek
Julius.Stroffek at Sun.COM
Wed Nov 21 05:35:39 EST 2007
Hi All,
I have created a simple test application which uses a stored procedure
to insert a record into a database using hibernate. I used hibernate
annotations and have overridden insert statement by
@SQLInsert(callable=true, sql="{? = call insert_party(?, ?, ?, ?)}",
check=ResultCheckStyle.PARAM)
However, hibernate throws the exception
...
Caused by: org.hibernate.exception.GenericJDBCException: could not
extract row counts from CallableStatement
at
org.hibernate.jdbc.Expectations$BasicParamExpectation.determineRowCount(Expectations.java:123)
at
org.hibernate.jdbc.Expectations$BasicExpectation.verifyOutcome(Expectations.java:41)
at
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2251)
at
org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2661)
at
org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:56)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
at
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
at
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
at
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at
org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at
org.hibernate.ejb.AbstractEntityManagerImpl$1.beforeCompletion(AbstractEntityManagerImpl.java:516)
... 50 more
Caused by: org.postgresql.util.PSQLException: Parameter of type
java.sql.Types=2 was registered, but call to getInt
(sqltype=java.sql.Types=4) was made.
at
org.postgresql.jdbc2.AbstractJdbc2Statement.checkIndex(AbstractJdbc2Statement.java:2387)
at
org.postgresql.jdbc2.AbstractJdbc2Statement.getInt(AbstractJdbc2Statement.java:1920)
at
org.hibernate.jdbc.Expectations$BasicParamExpectation.determineRowCount(Expectations.java:119)
... 62 more
I studied JDBC3 specification whether PostgreSQL driver is wrong
or not and I think that the driver is correct. There is a conversion table
on page B-182 which should correspond to ResultSet object getter
methods only. There is nothing about the conversion being done
in CallableStatement's getter methods.
Attached is the patch agains hibernate core Branch_3_2 which fixes the
issue using
getBigDecimal(parameterPosition).intValue()
Please, could someone review the fix and apply the patch? Could you also
back port the fix? Thank you.
Regards
Julius Stroffek
-------------- next part --------------
A non-text attachment was scrubbed...
Name: hibernate.diff
Type: text/x-patch
Size: 923 bytes
Desc: not available
Url : http://lists.jboss.org/pipermail/hibernate-dev/attachments/20071121/edc9191b/attachment.bin
More information about the hibernate-dev
mailing list