hibernate 序列 mysql_在MySQL和Hibernate中使用序列

您没有Mysql中的序列,但您可以使用’TABLE’id生成

@javax.persistence.TableGenerator(

name="EMP_GEN",

table="GENERATOR_TABLE",

pkColumnName = "key",

valueColumnName = "hi"

pkColumnValue="EMP",

allocationSize=20

)

@Entity

public class Klass {

@Id

@GeneratedValue(strategy = GenerationType.TABLE, generator=EMP_GEN)

@Column(name = "ID")

private Long id;

}

您可能需要在所有实体中添加片段@ javax.persistence.TableGenerator […]

编辑

Thank you so much. But do we have another way to use that snippet without adding it to each entity? And when creating tables on database, how can I declare the ID primary key column for DBMS to auto-generate the value like that? – napoleonit76

不幸的是,我不知道这样做的优雅方式:(.在我的项目中,我们在几个实体中使用序列,我们需要在每个类中声明序列.

你可以尝试的一件事(但我真的不喜欢)是为你的所有实体创建一个超类,而那个超类只包含ID字段和注释.我觉得我在一个项目中看到了这个,但我不是百分百肯定的.

关于告诉数据库使用该策略,我认为这不可能.您可以尝试添加触发器并将其应用于架构中的每个表.当您在表中插入新行,从生成器表中选择一个值并将其添加到该行时,将触发该触发器.老实说,我不知道这是否可行,如果你有2个并发会话创建行,我99%肯定这不会起作用.

您是否可以重新考虑您的策略并使用常用的自动增量列作为ID并将序列号放在表的另一列中?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值