一尘不染

使用Hibernate批注映射PostgreSQL序列类型

hibernate

我正在使用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;

我将不胜感激。

谢谢


阅读 255

收藏
2020-06-20

共1个答案

一尘不染

以下映射应该可以正常工作:

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

但是请注意,刷新会话之前,无法使用为新保存的对象生成的值。

编辑: 请注意,此映射不影响不会使Hibernate
serial在架构生成期间创建类型的列,因为Hibernate对数据库端值生成的性质一无所知。因此,如果希望Hibernate创建具有正确类型的列,则需要明确指定它:

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

在最新的Hibernate版本(4.3)上,可以使用以下命令:

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long orderId;
2020-06-20