休眠自动增量ID

问题描述 投票:74回答:7

我有一个使用带注释的hibernate的j2ee应用程序。如何在我的pojo类中注释Id字段以将其设置为自动增量或自动生成。并且在添加bean时,我将该字段留在我的bean null中吗?

java hibernate auto-increment
7个回答
144
投票
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

你坚持不懈地把它留给qazxsw poi(qazxsw poi)。 (如果你使用null / 0包装,qazxsw poi)

在某些情况下,null策略被解析为Integer rathen而不是LongAUTO,因此您可能需要手动将其设置为SEQUENCEIDENTITY(取决于底层数据库)。

似乎TABLE +指定序列名称适合您。


31
投票

做到如下: -

IDENTITY

您可以使用任意名称而不是kaugen。它工作得很好,我可以在控制台上看到下面的查询

TABLE

7
投票

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

AUTO - 标识列,序列或表,具体取决于底层数据库

TABLE - 保存id的表

IDENTITY - 标识列

序列 - 序列

身份拷贝 - 身份从另一个实体复制

使用表的示例

SEQUENCE

有关更多详细信息,请查看@Id @GenericGenerator(name="kaugen" , strategy="increment") @GeneratedValue(generator="kaugen") @Column(name="proj_id") public Integer getId() { return id; }


6
投票

FYI

使用带有mysql * auto_increment *列的netbeans New Entity Classes,可以创建一个带有以下注释的属性:

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

这让我得到了同样的错误,说列不能为空,所以我只是删除@NotNull anotation,留下属性null,它就可以了!


4
投票

如果您有一个要自动递增的数字列,则可以选择直接设置@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; 。这样做的好处是,即使在没有休眠的情况下使用该模式,模式也会自动生成该值。这可能会使您的代码特定于db:

link

0
投票

如果在类型为Serial时,任何人在这个SO问题中“碰撞”以寻找Informix表的策略。

我发现这有用......作为一个例子。

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

为此,请确保在执行session.SaveOrUpdate时传递special_serial_pk列的值为NULL。

在我的情况下,我使用JSON进行HTML POST,如此...

columnDefinition

0
投票

使用带有mysql auto_increment列的netbeans New Entity Classes,使用以下hibernate.hbm.xml创建一个属性:id是auto increment

© www.soinside.com 2019 - 2024. All rights reserved.