我正在使用Hibernate 3.3和PostgreSQL 8.x,并希望使用Hibernate批注来映射不是主键的自动增量列。
只要该列是由数据库而不是由Hibernate自动递增的,则在Postgres中使用SERIAL类型或序列映射该列都没有关系。我尝试了以下映射,但它们始终生成空的orderId。
@Column(name = "orderId", insertable = false) @Generated(GenerationTime.INSERT) //@GeneratedValue(strategy = javax.persistence.GenerationType.AUTO) private Integer orderId;
我将不胜感激。
谢谢
以下映射应该可以正常工作:
@Column(name = "orderId") @Generated(GenerationTime.INSERT) private Integer orderId;
但是请注意,刷新会话之前,无法使用为新保存的对象生成的值。
编辑: 请注意,此映射不影响不会使Hibernate serial在架构生成期间创建类型的列,因为Hibernate对数据库端值生成的性质一无所知。因此,如果希望Hibernate创建具有正确类型的列,则需要明确指定它:
serial
@Column(name = "orderId", columnDefinition = "serial") @Generated(GenerationTime.INSERT) private Integer orderId;
在最新的Hibernate版本(4.3)上,可以使用以下命令:
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long orderId;