Re: Migration to Hibernate 3.5 final

From: Craig Ringer <craig(at)postnewspapers(dot)com(dot)au>
To: Rafael Felix <felix(at)serhmatica(dot)com(dot)br>
Cc: pgsql-jdbc(at)postgresql(dot)org
Subject: Re: Migration to Hibernate 3.5 final
Date: 2010-04-10 11:36:42
Message-ID: 4BC062CA.9050104@postnewspapers.com.au
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-jdbc

Rafael Felix wrote:
> I´ve an application running in hibernate 3.3.2 and the applications
> works fine, with all blob fields using oid (byte[] in java),

Do you mean you're using the literal type `oid' in the Pg fields? Or are
you using the `lo' contrib type?

By using the `oid' type you're using out-of-line large objects,
referenced by object id (oid).

If you use `oid' directly, then when you delete a row from your table
the corresponding large object will NOT be deleted. The `lo' wrapper
contrib type provides that. It's not in mainline yet (alas), perhaps
because it can't guarantee correctness - in particular a TRUNCATE TABLE
will still leak large objects.

> Migrating to hibernate 3.5 all blob fields not work anymore, and the
> server log shows
>
> ERROR org.hibernate.util.JDBCExceptionReporter - ERROR: column
> "preferencia" is of type oid but expression is of type bytea

OK, so you're now mapping byte[] to the Pg type 'bytea' instead of to pg
large objects.

You can change this mapping in your hibernate settings if you want
things to go back to how they were. See large object mapping in the
Hibernate documentation.

> But I'm cann't change the tables struct for use bytea instead oid,
> because I lost all data.

Do you mean "because you've lost all your data" or "because by doing so
you will lose all your data"?

I presume the latter.

What I'd do would be:

a) Change hibernate's mapping for byte[] back to large object instead of
bytea by overriding it in the Hibernate configuration

b) Evaluate whether bytea or large object is actually better for you by
reading the postgresql documentation and thinking a about your needs.
Consider how often you update the data, how big the maximum size of
object you need to store is, etc.

c) Decide whether you should migrate to bytea or stick with large objects.

d) If you stick to large objects, switch from raw oid types to `lo'
types, so you get proper large object cleanup on delete/update. Consider
using vacuumlo .

--
Craig Ringer

In response to

Browse pgsql-jdbc by date

  From Date Subject
Next Message Radosław Smogura 2010-04-10 12:58:54 Re: Migration to Hibernate 3.5 final
Previous Message Rafael Felix 2010-04-09 14:37:14 Migration to Hibernate 3.5 final