java递增序列号_【java技术】日期+自增长 流水号生成策略

本文探讨了在不使用数据库自增的情况下,如何通过Java实现日期+自增长流水号作为主键的生成策略。作者尝试了使用Hibernate JPA的自定义主键生成器,但发现无法在JPA注解中实现。最终,采取了在保存前手动创建流水号ID的方法,通过维护两张数据库表来确保每天自增长的流水号从1开始且无重复。详细介绍了实现逻辑和相关数据库表的设计。
摘要由CSDN通过智能技术生成

本想利用Hibernate的JPA方式(不想采用数据库的方式,而是在程序代码中想办法设定),

寻找一种在调用save方法时可以自动生成流水号(8位日期+6位自增长号)作为主键。

但是在研究了Hibernate主键生成策略和Hibernate自定义主键后,

采用JPA注解的形式,自己写生成器来实现org.hibernate.id.Configurable和org.hibernate.id.IdentifierGenerator

两接口的generate 和configure方法,在hbm.xml中可以实现,但是在JPA方式下目前无法实现。

后来,决定用JPA的assigned策略,在save之前程序手动创建流水号id。

那么创建的这个流水号,每天后6位自增长都要从1开始,并且不能有重复。

考虑到并发,不记录产生的流水号最大值,而是记录自增长个数。

思路:1.数据库中创建两张表,一个是定义序列规则的,记录系统所有的序列,因为系统中可能需要“8位日期+6位自增长”这样的序列,

还可能需要“字母+日期”这样的序列;

另一个是记录自增长最大值的表,记录 当天自增长的最大值,初始为1;

2.程序每要创建流水号ID时,

首先将数据库中系统时间和最后更新时间比较,如果相等,则将最大值字段+1;否则置1;最后更新时间更新为当前时间;

然后取出最大值,作为自增长部分的内容,再和日期拼接,即可产生流水号ID。

1.首先定义序列号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值