hibernate自动递增ID

我有一个j2ee应用程序使用hibernate注释。 我如何注释我的pojo类中的Id字段将其设置为自动增量或自动生成。 并在添加的豆我离开这个领域在我的豆空?

@Id @GeneratedValue(strategy=GenerationType.AUTO) private int id; 

并且在持续的时候让它为null0 )。 (如果使用Integer / Long包装,则为null

在某些情况下, AUTO策略被parsing为SEQUENCE而不是IDENTITYTABLE ,因此您可能需要将其手动设置为IDENTITYTABLE (取决于基础数据库)。

看来SEQUENCE + 指定序列名称为您工作。

这样做: –

 @Id @GenericGenerator(name="kaugen" , strategy="increment") @GeneratedValue(generator="kaugen") @Column(name="proj_id") public Integer getId() { return id; } 

您可以使用任何名称而不是kaugen。 它运行良好,我可以看到下面的控制台查询

 Hibernate: select max(proj_id) from javaproj Hibernate: insert into javaproj (AUTH_email, AUTH_firstName, AUTH_lastName, projname, proj_id) values (?, ?, ?, ?, ?) 

FYI

使用netbeans 从数据库的新实体类与一个mysql * auto_increment *列,创build一个属性与以下注释:

 @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id") @NotNull private Integer id; 

这是让我一样的错误,说列不能为空,所以我只是删除了@NotNull anotation留下属性为空,它的工作原理!

Hibernate定义了五种types的标识符生成策略:

AUTO – 根据底层数据库,标识列,序列或表

– 持有ID的表

IDENTITY – 标识列

序列 – 序列

身份复制 – 身份从另一个实体复制

使用表的示例

 @Id @GeneratedValue(strategy=GenerationType.TABLE , generator="employee_generator") @TableGenerator(name="employee_generator", table="pk_table", pkColumnName="name", valueColumnName="value", allocationSize=100) @Column(name="employee_id") private Long employeeId; 

有关更多详细信息,请检查链接 。

如果您想要自动增加数字列,则可以直接设置columnDefinition 。 这样做的好处是,模式即使在没有hibernate的情况下也能自动生成值。 这可能会使你的代码特定于db:

 import javax.persistence.Column; @Column(columnDefinition = "serial") // postgresql