hibernate自动递增ID
我有一个j2ee应用程序使用hibernate注释。 我如何注释我的pojo类中的Id字段将其设置为自动增量或自动生成。 并在添加的豆我离开这个领域在我的豆空?
@Id @GeneratedValue(strategy=GenerationType.AUTO) private int id;
并且在持续的时候让它为null
( 0
)。 (如果使用Integer
/ Long
包装,则为null
)
在某些情况下, AUTO
策略被parsing为SEQUENCE
而不是IDENTITY
或TABLE
,因此您可能需要将其手动设置为IDENTITY
或TABLE
(取决于基础数据库)。
看来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