我有一个使用hibernate和注解的j2ee应用程序。如何在我的pojo类中注释Id字段,以将其设置为自动增量或自动生成。在添加bean时,我是否将该字段留在bean中为null?
Answers:
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
并在保留时将其保留为null
(0
)。(null
如果使用Integer
/Long
包装器)
在某些情况下,该AUTO
策略被解析为SEQUENCE
toIDENTITY
或to TABLE
,因此您可能需要手动将其设置为IDENTITY
or 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 (?, ?, ?, ?, ?)
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;
有关更多详细信息,请检查链接。
如果在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为自动递增