【发布时间】:2011-01-01 23:06:41
【问题描述】:
我有一个使用带有注释的休眠的 j2ee 应用程序。如何注释我的 pojo 类中的 Id 字段以将其设置为自动增量或自动生成。并且在添加 bean 时,我是否将该字段留在我的 bean 中?
【问题讨论】:
标签: java hibernate auto-increment
我有一个使用带有注释的休眠的 j2ee 应用程序。如何注释我的 pojo 类中的 Id 字段以将其设置为自动增量或自动生成。并且在添加 bean 时,我是否将该字段留在我的 bean 中?
【问题讨论】:
标签: java hibernate auto-increment
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
你在坚持的时候留下null (0)。 (null 如果你使用 Integer / Long 包装器)
在某些情况下,AUTO 策略被解析为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 (?, ?, ?, ?, ?)
【讨论】:
仅供参考
使用 netbeans 来自数据库的新实体类 和 mysql *auto_increment* 列,为您创建一个带有以下注释的属性:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
@NotNull
private Integer id;
这让我遇到了同样的错误,说该列不能为空,所以我只是删除了 @NotNull 注释,使属性为空,它可以工作!
【讨论】:
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;
更多详情,请查看link。
【讨论】:
如果您有一个想要自动递增的数字列,则可以选择直接设置columnDefinition。这样做的好处是,即使在没有休眠的情况下使用模式也会自动生成值。这可能会使您的代码特定于数据库:
import javax.persistence.Column;
@Column(columnDefinition = "serial") // postgresql
【讨论】:
当 PK 类型为 Serial 时,如果有人在此 SO 问题中搜索 Informix 表的策略时遇到问题。
我发现这是可行的……作为一个例子。
@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 新实体类,为您创建一个具有以下 hibernate.hbm.xml 的属性: id 是自动递增的
【讨论】: