在一天内为实体生成唯一的序列号
我需要为插入表中的实体生成唯一的编号。每个数字由实体创建日期和序列号组成:日期 + sn。序列号必须在第二天开始时重置。
| id | creation date | unique number |
--------------------------------------
| 1 | Sep 1, 2010 | 201009011 |
| 2 | Sep 1, 2010 | 201009012 |
| 3 | Sep 2, 2010 | 201009021 |
| 4 | Sep 2, 2010 | 201009022 |
如何在 MySQL 数据库中使用 Hibernate 上的 JPA(目前它们用于所有数据库交互)以及事务安全方式(可以同时插入实体)来完成此操作?
当然,我会欣赏所有其他方法的描述。谢谢。
I need to generate unique numbers for entities inserted into a table. Each number consists from entity creation date and serial number: date + sn. Serial numbers must be reset at the beginning of next day.
| id | creation date | unique number |
--------------------------------------
| 1 | Sep 1, 2010 | 201009011 |
| 2 | Sep 1, 2010 | 201009012 |
| 3 | Sep 2, 2010 | 201009021 |
| 4 | Sep 2, 2010 | 201009022 |
How can it be done using JPA over Hibernate (currently they are used for all database interactions) and in transaction safe way (entities can be inserted simultaneously) in MySQL database?
Of course, I will appreciate the descriptions of all other approaches. Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以在插入之前使用触发器。
请注意,将 newdayid 中的小数位数固定为 8 位(或其他数字)可能是个好主意,如果您不想这样做,只需使用注释掉的行即可。
You can use a trigger before insert.
Note that it might be a good idea to fix the number of decimals in newdayid to 8 digits (or whatever), if you don't want that, just use the commented out line.
您可以结合使用 @Johan 建议的数据库生成值和
@Generate(GenerationTime.INSERT)
Hibernate Annotation Extensions。creationDate
字段可以在 @PrePersit 回调事件示例(为了更清晰起见,省略 Getter 和 setter)
}
You can use a combination of database generated value like @Johan propose and the use of the
@Generated(GenerationTime.INSERT)
Hibernate Annotation Extensions.The
creationDate
field can be set in the @PrePersit callback event supported by JPAExample (Getter and setter ommit for better clarity)
}