自定義主鍵生成策略
- 在entity類上添加注解
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "custom-id") @GenericGenerator(name = "custom-id", strategy = "com.h5page-mapdiy.utils.CustomIDGenerator")
@Column(name = "id")
public Long getId() {
return id;
}
注意:GeneratedValue中的generator要與GenericGenerator中的name相等 上面代碼中是"custom-id"
- 在utils包下添加自定義ID生成類
package com.h5page-mapdiy.utils
import org.hibernate.MappingException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentityGenerator;
import java.io.Serializable;
/**
* 自定義ID生成器
* @author liaoguanwang
* @date 2019-03-16 10:33
*/
public class CustomIDGenerator extends UUIDGenerator {
@Override
public Serializable generate(SharedSessionContractImplementor session, Object object) throws MappingException {
SimpleDateFormat simpleDateFormat;
simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
Date date = new Date();
String str = simpleDateFormat.format(date);
Random random = new Random();
int rannum = (int) (random.nextDouble() * (99999 - 10000 + 1)) + 10000;// 獲取5位隨機數
return rannum + str;// 當前時間
}
}
注意:
- 測試的ID是Long類型所以這里繼承的是IdentityGenerator類
- 如果ID為String類型的話應該繼承 UUIDGenerator 或者 UUIDGenerator