我有一个j2ee应用程序使用hibernate和annotation。我如何在我的pojo类中注解Id字段以将其设置为自动增量或自动生成。在添加bean时,我是否将bean中的该字段保留为null?
balp4ylt1#
@Id @GeneratedValue(strategy=GenerationType.AUTO) private int id;
字符串在持久化时,将其保留为null(0)。(如果使用Integer/Long Package 器,则为null)在某些情况下,AUTO策略被解析为SEQUENCE,而不是IDENTITY或TABLE,因此您可能需要手动将其设置为IDENTITY或TABLE(取决于底层数据库)。看起来**SEQUENCE**+指定序列名对您有用。
null
0
Integer
Long
AUTO
SEQUENCE
IDENTITY
TABLE
2nbm6dog2#
按以下步骤进行:-
@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 (?, ?, ?, ?, ?)
型
g52tjvyc3#
仅供参考使用带有mysqlauto_increment 列的netbeansNew Entity Classes from Database,创建一个带有以下注解的属性:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id") @NotNull private Integer id;
字符串这给我带来了同样的错误,说列不能为空,所以我只是删除了@NotNull符号,留下了空属性,它工作了!
enxuqcxy4#
Hibernate定义了五种类型的标识符生成策略:
AUTO-标识列、序列或表,具体取决于底层DBTABLE-保存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。
1yjd4xko5#
如果您有一个希望自动递增的数字列,则可以直接设置columnDefinition。这样做的好处是,即使在没有hibernate的情况下使用,模式也会自动生成值。这可能会使您的代码特定于db:
columnDefinition
import javax.persistence.Column; @Column(columnDefinition = "serial") // PostgreSQL @Column(columnDefinition = "integer auto_increment") // MySql
字符串
pepwfjgg6#
当PK类型为Serial时,如果有人为了寻找Informix表的策略而在此SO问题中“撞”了一下。我发现这很有效...作为一个例子。
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "special_serial_pk") private Integer special_serial_pk;
字符串为此,请确保在执行session.SaveOrUpdate时,传递special_serial_pk* NULL列的值。在我的例子中,我做了一个HTML* POSTwithJSONlike so...
{ "special_serial_pk": null, //<-- Field to be incremented "specialcolumn1": 1, "specialcolumn2": "I love to code", "specialcolumn3": true }
k2arahey7#
使用带有mysql auto_increment 列的netbeansNewEntityClassesfromDatabase,创建一个带有以下hibernate.hbm.xml的属性:id为自动递增
7条答案
按热度按时间balp4ylt1#
字符串
在持久化时,将其保留为
null
(0
)。(如果使用Integer
/Long
Package 器,则为null
)在某些情况下,
AUTO
策略被解析为SEQUENCE
,而不是IDENTITY
或TABLE
,因此您可能需要手动将其设置为IDENTITY
或TABLE
(取决于底层数据库)。看起来**
SEQUENCE
**+指定序列名对您有用。2nbm6dog2#
按以下步骤进行:-
字符串
你可以使用任意的名字来代替kaugen。它运行良好,我可以看到下面的查询控制台
型
g52tjvyc3#
仅供参考
使用带有mysqlauto_increment 列的netbeansNew Entity Classes from Database,创建一个带有以下注解的属性:
字符串
这给我带来了同样的错误,说列不能为空,所以我只是删除了@NotNull符号,留下了空属性,它工作了!
enxuqcxy4#
Hibernate定义了五种类型的标识符生成策略:
AUTO-标识列、序列或表,具体取决于底层DB
TABLE-保存id的表
IDENTITY-标识列
序列-序列
身份复制-身份从另一个实体复制
使用表的示例
字符串
有关详细信息,请查看link。
1yjd4xko5#
如果您有一个希望自动递增的数字列,则可以直接设置
columnDefinition
。这样做的好处是,即使在没有hibernate的情况下使用,模式也会自动生成值。这可能会使您的代码特定于db:字符串
pepwfjgg6#
当PK类型为Serial时,如果有人为了寻找Informix表的策略而在此SO问题中“撞”了一下。
我发现这很有效...作为一个例子。
字符串
为此,请确保在执行session.SaveOrUpdate时,传递special_serial_pk* NULL列的值。
在我的例子中,我做了一个HTML* POSTwithJSONlike so...
型
k2arahey7#
使用带有mysql auto_increment 列的netbeansNewEntityClassesfromDatabase,创建一个带有以下hibernate.hbm.xml的属性:id为自动递增