Обсуждение: JDBC Driver can't read UUID from database

Поиск
Список
Период
Сортировка

JDBC Driver can't read UUID from database

От
Dean Schulze
Дата:
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.

Re: JDBC Driver can't read UUID from database

От
Kris Jurka
Дата:
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

Re: JDBC Driver can't read UUID from database

От
Dean Schulze
Дата:
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

Re: JDBC Driver can't read UUID from database

От
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