mysql sequencegenerator_Hibernate基础之五:自增主键@GeneratedValue、@SequenceGenerator | 学步园...

本文详细介绍了Hibernate中主键自增的三种策略:默认的native策略,使用私有sequence和Table_Generator。通过示例代码展示了如何配置和使用这些策略,特别是如何为每个表指定独立的序列。同时,提到了native策略可能导致的所有表共用一个sequence的问题及其解决方案。

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

一:使用默认的自增主键

主键自增有好几种策略:identity是MySql对应的自增、sequence对应oracle的自增序列,

native是根据所连接的数据库自动选择上诉两个或hilo策略

在  @Id  后边加上  @GeneratedValue,就相当于调用了native策略

(可以指定@GeneratedVlaue(strategy=GenerationType.IDENTITY)或者.SEQUENCE)

//setter&getter

@Id

@Column(name="id")

@GeneratedValue //相当于native

public int getTeacherid() {

return teacherid;

}

执行时输出:DEBUG SchemaUpdate:226 - create sequence hibernate_sequence

证明Hibernate已经帮我创建了一个默认的序列

这样做有一个缺点,就是所有表都公用这一个sequence,要靠后边的方法解决

二:使用私有sequence

实体下边写

@Entity

@SequenceGenerator(name="SeqGen1",sequenceName="teacher_sequence")//name是这个序列生成器的代号,sequenceName是要存入数据库的序列的名字

............

@Id

@GeneratedValue(generator="SeqGen1")//写明使用哪个序列生成器

@Entity

@Table(name="t_Teacher")

@SequenceGenerator(name="SeqGen1",sequenceName="teacher_sequence")//name是这个序列生成器的代号,sequenceName是要存入数据库的序列的名字

public class Teacher {

private int teacherid;

private String name;

private int age;

private Date birthday;

private String secret;

private Grade grade;

//setter&getter

@Id

@Column(name="id")

@GeneratedValue(generator="SeqGen1")//写明使用哪个序列生成器

public int getTeacherid() {

return teacherid;

}

这样就能每个表格都用自己指定的sequence了:Hibernate:

select

teacher_sequence.nextval

from

dual

三:Table_Generator

用一张表给所有表的主键创建序列,跨数据库平台以后数据也不受影响

这个少用又复杂,用的时候再去查吧

@javax.persistence.TableGenerator(

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值