为啥 mysql 中的 generationtype.sequence 不起作用?

Posted

技术标签:

【中文标题】为啥 mysql 中的 generationtype.sequence 不起作用?【英文标题】:why generationtype.sequence in mysql doesn't work?为什么 mysql 中的 generationtype.sequence 不起作用? 【发布时间】:2013-05-03 17:13:53 【问题描述】:

我正在使用 hibernate 4.1、zk 6.5 和 mysql 9.3 开发应用程序,我尝试在我的代码中使用 generationtype.sequence 但不幸的是它返回了一个错误,在互联网上进行了一些研究后我发现 MySQL 不支持所以我使用了@GeneratedValue(strategy = GenerationType.IDENTITY),它解决了我的问题!但我想知道为什么序列不适用于 mySql ?

【问题讨论】:

Hibernate problems with Auto Increment ID MYSQL 5的可能重复 MySQL 9.3?我以为目前的版本号大约是 5 和 6... 您需要自动增量列的“身份”映射。 一个序列不适用于 MySql,因为没有人将它构建到数据库中。代码不存在。你回答了你自己的问题,I found out that MySQL doesn't support sequence 这个链接很有帮助:roseindia.net/hibernate/hibernateidgeneratorelement.shtml 【参考方案1】:

我要留下一个答案,所以这个问题可以从“未回答”的 SOF 类别中删除。 KevinB,你可以留下答案,我会投赞成票。 我只是希望这个问题被关闭......不仅仅是(我)“获得积分”。

但这里有一个具体的答案和参考。

短版:

MySql 没有“真正的”序列。它使用 Sequence-via-a-Table 解决方法...如果您尝试进行大量 JPA 批处理,这将是一个瓶颈。

https://thorben-janssen.com/5-things-you-need-to-know-when-using-hibernate-with-mysql/

    映射:主键 有效处理和创建主键是应用程序的基本但最重要的部分之一。

JPA 规范的@GeneratedValue 注释允许您定义要用于创建唯一主键值的策略。您可以在 SEQUENCE、IDENTITY、TABLE 和 AUTO 之间进行选择。

一般来说,我推荐使用 SEQUENCE 策略,因为它允许 Hibernate 使用 JDBC 批处理和其他需要延迟执行 SQL INSERT 语句的优化策略。

但您不能将此策略用于 MySQL 数据库。它需要一个数据库序列,而 MySQL 不支持此功能。

【讨论】:

以上是关于为啥 mysql 中的 generationtype.sequence 不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

注释@Id 和@GeneratedValue(strategy = GenerationType.IDENTITY) 有啥用?为啥世代类型是身份?

HSQL 中的@GeneratedValue(strategy=GenerationType.IDENTITY) 不会自动生成主键

如何在MySQL中保存数据并将@Id从GenerationType.AUTO更改为GenerationType.TABLE

SpringBoot 2.1.5.RELEASE & MySQL 8.0.15 中未生成 GenerationType.IDENTITY

使用 GenerationType.Table 时如何集群 Hibernate ORM 标识符

为啥没有@Transactional 我可以保存? [复制]