mysql - 在一天内为实体生成唯一序列号

标签 mysql hibernate jpa transactions sequence

我需要为插入到表中的实体生成唯一编号。每个数字由实体创建日期和序列号组成: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/

相关文章:

java - 如何使用 JDBC 连接到具有集成安全性的 Sql Server(通过 persistence.xml)

java - 在 hibernate HQL 中指定连接条件 "ON columns"?

java - Spring Boot - 配置了两个数据源 - 如何使用第二个数据源?

MySQL 性能 : JOIN ON vs WHERE

php - for()中的mysql_fetch_array函数出现错误

php - MYSQL 检索最后一个查询是更新还是插入

hibernate - 从实体 pojo 中删除 Hibernate?

java - 内存泄漏 Spring Boot

hibernate - 具有超过 1 个继承级别的 @MappedSuperclass 在实体映射中抛出重复列异常

php - MySQL 是否始终保证以这种格式将 DATETIME 转换为 STRING?