Tim, You can apply @GeneratedValue to a field which is generated by the database even if the field is not a primary key. The following did work for me on PostgreSQL:
create table gv_test(id bigserial, modified timestamp not null default current_timestamp, vvv int) @Entity @Table(name="gv_test") public class Message { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private long id; private Integer vvv; @GeneratedValue(strategy=GenerationType.IDENTITY) private Date modified; public Message() { } public Message(Integer v) { vvv = v; } public long getId() { return id; } public void setId(long val) { id = val; } public Date getModified() { return modified; } public void setModified(Date modified) { this.modified = modified; } public Integer getVvv() { return vvv; } public void setVvv(Integer vvv) { this.vvv = vvv; } } em.getTransaction().begin(); Message m = new Message(60); em.persist(m); System.out.println(m.getModified()); em.getTransaction().commit(); Regards, Milosz