繁体   English   中英

休眠自动增量ID

[英]Hibernate Auto Increment ID

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

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

并且在持久化时将其保留为null0 )。 (如果使用Integer / Long包装器,则为null

在某些情况下, AUTO策略被解析为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

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

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

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

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

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

TABLE - 保存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 这样做的好处是,即使在没有休眠的情况下使用该模式,模式也会自动生成该值。 这可能会使您的代码特定于db:

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

在寻找为Informix表的策略这太问题的情况下任何人“颠簸”的时候是PK系列

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

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "special_serial_pk")
private Integer special_serial_pk;

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

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

{
"special_serial_pk": null, //<-- Field to be incremented
"specialcolumn1": 1,
"specialcolumn2": "I love to code",
"specialcolumn3": true
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM