hibernate - 使用 Hibernate 注释映射 PostgreSQL 串行类型

标签 hibernate postgresql sequence auto-increment

我正在使用 Hibernate 3.3 和 PostgreSQL 8.x,并且想使用 Hibernate 注释来映射一个不是主键的自动递增列。

在 Postgres 中使用 SERIAL 类型或序列映射列并不重要,只要它由数据库而不是 Hibernate 自动递增即可。我尝试了以下映射,但它们总是生成空 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;

但是请注意,在刷新 session 之前,为新保存的对象生成的值不可用。

编辑:请注意,此映射不会影响不会使 Hibernate 在模式生成期间创建 serial 类型的列,因为 Hibernate 什么都不知道关于数据库端值(value)生成的本质。因此,如果您希望 Hibernate 创建具有适当类型的列,您需要明确指定它:

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

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

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

关于hibernate - 使用 Hibernate 注释映射 PostgreSQL 串行类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4979746/

相关文章:

django - 检索邻居的查询太慢

postgresql - PostgreSQL 代码的哪一部分正在处理类型定义?

java - 如何使用 Spring Batch 和 Hibernate 从 @JoinColumn 获取值

java - Hibernate 不一致地加载 Postgresql bytea

java - 在 Java 中从 ArrayList 生成序列号

excel - 手动进行更改时对任务列表重新排序

java - Clojure 和 HBase : Iterate Lazily over a Scan

java - 在 Hibernate 中使用 JPA 注释来描述外键仅在子表中的 @OneToMany 关系

java - HIbernate 实体管理器 : How to cache queries?

java - HQL查询where存在或列表元素之间