hibernate 在mysql数据库上,利用sequence生成主键的另一种解决方法

本文详细介绍了如何在MySQL环境下利用Hibernate配置sequence主键生成策略,克服了MySQL不支持自增主键的限制,通过调整配置参数实现了sequence的正确应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学过hibernate的都知道hibernate支持n种主键生成策略。但有一种比较诡异,就是sequence。众所周知,oracle 表的主键生成策略是没有自增(identity或者autoIncrement)的,他是通过 sequence 来实现的。而mysql正好与oracle相反,mysql支持自增,恰好不支持 sequence。如果想要在mysql上应用sequence主键生成策略那就悲剧了。
但是天无绝人之路,问题总是有办法解决的。hibernate为我们提供了其他的解决办法。像一般,我们配置sequence的主键生成策略是这样的:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.example.entity">
<class name="Foo">
<id name="id">
<generator class="sequence"></generator>
</id>
</class>
</hibernate-mapping>

但上面的配置在mysql下是行不通的,如果要适应mysql,需要做将配置改为:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.example.entity">
<class name="Foo">
<id name="id">
<generator class="org.hibernate.id.enhanced.SequenceStyleGenerator">
<!--初始值,默认是1-->
<param name="initial_value">1000</param>
<!--自增大小,默认是1-->
<param name="increment_siz">1</param>
<!--sequence的名字,默认是"hibernate_sequence"-->
<param name="sequence_name">hibernate_sequence</param>
</generator>
</id>
</class>
</hibernate-mapping>

(以上配置是我在hibernate 3.6.1 上完成的)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值