We're having an issue with generated primary keys in a postgres database. We use Seam, JbossAS, JPA, Hibernate. In a class named Address we have a "long id" with the following annotations:

@Id
@SequenceGenerator(name = "ADDRESS_SEQ", sequenceName = "address_id_seq", allocationSize = 1, initialValue =51)
@GeneratedValue(generator = "ADDRESS_SEQ")
private long id;

This works perfectly well, until we decided to seed the database with an import script. It seems like Hibernate does not see the imported addresses. The address class in Postgres has a field 'id' of type "BigInt". But in order to have autogenerated keys, it should be 'serial'.

Our solution was to change the annotations to

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

Now, I'm happy that we found a solution, but I don't understand why this works. Also, shouldn't Hibernate always make @GeneratedValue fields of type 'serial'?

>From what I found googling, this seems to be a problem that only occurs when you use Postgres.

dagdag
Christine



--
BiD Network
Preparing emerging market entrepreneurs for investors
www.bidnetwork.org

Come to the SME investor marketplace on June 2nd
--> smeforum2010.org