Mapping PostgreSQL serial type with Hibernate annotations Mapping PostgreSQL serial type with Hibernate annotations postgresql postgresql

Mapping PostgreSQL serial type with Hibernate annotations


The following mapping should work fine:

@Column(name = "orderId")@Generated(GenerationTime.INSERT)private Integer orderId;

Note, however, that generated value for freshly saved objects is not available until session is flushed.

EDIT: Note that this mapping doesn't affect doesn't make Hibernate to create a column of type serial during schema generation, since Hibernate doesn't know anything about the nature of value generation at the database side. Therefore, if you want Hibernate to create a column with a proper type, you need to specifiy it explicitly:

@Column(name = "orderId", columnDefinition = "serial")@Generated(GenerationTime.INSERT)private Integer orderId;

And on a recent Hibernate version (4.3), you can use this:

@Id@GeneratedValue(strategy=GenerationType.IDENTITY)private Long orderId;


the accepted answer doesn't work for me.

this did though:

@Id@Column(name = "your_id", columnDefinition = "serial")@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer yourId;


I'm using this with postgresql9.1, should work with 8 too:

@SequenceGenerator(allocationSize=1, initialValue=1, sequenceName="account_id_seq", name="account_id_seq")@GeneratedValue(generator="account_id_seq", strategy=GenerationType.SEQUENCE)@Id@Column(name="id")private Integer id;