Hibernate自动递增ID
我有一个使用 hibernate 和注释的 j2ee 应用程序。如何注释 pojo 类中的 Id 字段以将其设置为自动增量或自动生成。在添加 bean 时,我是否将该字段保留在 bean 中为空?
I have a j2ee application using hibernate with annotation. How do I annotate the Id field in my pojo class to set it as auto increment or auto generated. and in adding the bean do I leave that field in my bean null?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
Hibernate 定义了五种类型的标识符生成策略:
AUTO - 标识列、序列或表,具体取决于底层数据库
TABLE - 保存 id 的表
IDENTITY > - 身份列
SEQUENCE - 序列
身份复制 – 身份是从另一个实体复制的
示例使用表
了解更多详细信息,请检查链接。
Hibernate defines five types of identifier generation strategies:
AUTO - either identity column, sequence or table depending on the underlying DB
TABLE - table holding the id
IDENTITY - identity column
SEQUENCE - sequence
identity copy – the identity is copied from another entity
Example using Table
for more details, check the link.
如果您有一个想要自动递增的数字列,则可以选择直接设置
columnDefinition
。这样做的优点是,即使在没有休眠的情况下使用该模式,模式也会自动生成该值。但这可能会使您的代码特定于数据库:If you have a numeric column that you want to auto-increment, it might be an option to set
columnDefinition
directly. This has the advantage, that the schema auto-generates the value even if it is used without hibernate. This might make your code db-specific though:当 PK 类型为 Serial 时,如果有人在搜索 Informix 表的策略时在此 SO 问题中“遇到”问题。
我发现这有效......作为一个例子。
为此,请确保在执行 session.SaveOrUpdate 时传递 special_serial_pk NULL 列的值。
就我而言,我使用 JSON 执行 HTML POST ,如下所示......
In case anyone "bumps" in this SO question in search for strategies for Informix table when PK is type Serial.
I have found that this works...as an example.
For this to work make sure when you do session.SaveOrUpdate you pass the value for the column special_serial_pk NULL .
In my case i do an HTML POST with JSON like so...
将数据库中的 netbeans 新实体类与 mysql auto_increment 列一起使用,会创建一个具有以下 hibernate.hbm.xml 的属性:
id自增
Using netbeans New Entity Classes from Database with a mysql auto_increment column, creates you an attribute with the following hibernate.hbm.xml:
id is auto increment
并且在持久化时将其保留为
null
(0
)。 (null
如果您使用Integer
/Long
包装器)在某些情况下,
AUTO
策略会解析为SEQUENCE
而不是IDENTITY
或TABLE
,因此您可能需要手动将其设置为IDENTITY
或TABLE< /code> (取决于底层数据库)。
看来
SEQUENCE
+ 指定序列名称对你有用。and you leave it
null
(0
) when persisting. (null
if you use theInteger
/Long
wrappers)In some cases the
AUTO
strategy is resolved toSEQUENCE
rathen than toIDENTITY
orTABLE
, so you might want to manually set it toIDENTITY
orTABLE
(depending on the underlying database).It seems
SEQUENCE
+ specifying the sequence name worked for you.按如下方式操作:-
您可以使用任意名称代替 kaugen。
它运行良好,我可以在控制台上看到以下查询
Do it as follows :-
You can use any arbitrary name instead of kaugen.
It worked well, I could see below queries on console
仅供参考,
使用 netbeans 数据库中的新实体类 和 mysql *auto_increment* 列,为您创建一个带有以下注释的属性:
这让我很困惑同样的错误说该列不能为空,所以我只是删除了 @NotNull 注释,留下属性为空,并且它有效!
FYI
Using netbeans New Entity Classes from Database with a mysql *auto_increment* column, creates you an attribute with the following annotations:
This was getting me the same an error saying the column must not be null, so i simply removed the @NotNull anotation leaving the attribute null, and it works!