我需要为插入到表中的实体生成唯一编号。每个数字由实体创建日期和序列号组成:date + 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 数据库中使用 JPA 而不是 Hibernate(目前它们用于所有数据库交互)并以事务安全的方式(可以同时插入实体)完成?
当然,我会欣赏所有其他方法的描述。谢谢。
最佳答案
您可以在插入前使用触发器。
DELIMITER $$
CREATE TRIGGER bi_table1_each BEFORE INSERT ON table1 FOR EACH ROW
BEGIN
DECLARE creationdate DATE;
DECLARE newdayid INTEGER;
SET creationdate = new.`creation date`;
SELECT count(*) + 1 INTO newdayid FROM table1
WHERE table1.`creation date` = creationdate;
-- NEW.`unique number` = CONCAT(DATE_FORMAT(creationdate,'%Y%m%d'),newdayid);
NEW.`unique number` = CONCAT(DATE_FORMAT(creationdate,'%Y%m%d')
RIGHT(CONCAT('00000000',newdayid),8));
END $$
DELIMITER ;
请注意,将 newdayid 中的小数位数固定为 8 位(或其他)可能是个好主意,如果您不想这样,只需使用注释掉的行即可。
关于mysql - 在一天内为实体生成唯一序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7244360/