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