Обсуждение: JDBC Driver can't read UUID from database
I'm using Hibernate (3.6 and 4.0) with Postgresql 9.1. Our tables have UUI= Ds in them and your driver is trying to convert UUIDs to longs: Caused by: org.postgresql.util.PSQLException: Bad value for type long : dba= da1e4-a165-4601-b34e-d08428cd81df at org.postgresql.jdbc2.AbstractJdbc2ResultSet.toLong(AbstractJdbc2ResultSe= t.java:2796) at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getLong(AbstractJdbc2ResultS= et.java:2019) at org.postgresql.jdbc4.Jdbc4ResultSet.getBlob(Jdbc4ResultSet.java:52) at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getBlob(AbstractJdbc2ResultS= et.java:335) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav= a:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor= Impl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.hibernate.engine.jdbc.internal.proxy.AbstractResultSetProxyHandler.c= ontinueInvocation(AbstractResultSetProxyHandler.java:104) ... 32 more I've tried chaining the Hibernate annotations to treat them as Strings and = CLOBs but I get the same exception. Driver versions I've tried are 9.0-801.jdbc4 and 9.1-901.jdbc4 This is a show stopper.
On Tue, 5 Jun 2012, Dean Schulze wrote: >=20 > I'm using Hibernate (3.6 and 4.0) with Postgresql 9.1. =A0Our tables have > UUIDs in them and your driver is trying to convert UUIDs to longs: >=20 This is a hibernate mapping problem, not a JDBC Driver problem. If you=20 have a plain ResultSet and call getString() on a UUID field, it will=20 certainly work. Mapping the UUID to BLOB or CLOB is incorrect. I'm not=20 sure why your attempt to map it to a String didn't work, but you are=20 not convincing Hibernate to use a plain getString call. Kris Jurka
Thanks. Out of curiosity why didn't the driver map the Postgresql UUID to a Java UUID? On 6/6/12 2:12 AM, "Kris Jurka" <books@ejurka.com> wrote: > > >On Tue, 5 Jun 2012, Dean Schulze wrote: > >>=20 >> I'm using Hibernate (3.6 and 4.0) with Postgresql 9.1. Our tables have >> UUIDs in them and your driver is trying to convert UUIDs to longs: >>=20 > >This is a hibernate mapping problem, not a JDBC Driver problem. If you >have a plain ResultSet and call getString() on a UUID field, it will >certainly work. Mapping the UUID to BLOB or CLOB is incorrect. I'm not >sure why your attempt to map it to a String didn't work, but you are >not convincing Hibernate to use a plain getString call. > >Kris Jurka
On Mon, 11 Jun 2012, Dean Schulze wrote: > Out of curiosity why didn't the driver map the Postgresql UUID to a Java > UUID? > The example I gave of calling getString must return a String and not another type. With a recent JDBC Driver and Java version, calling getObject will return a UUID object. Kris Jurka