概述:项目中想要根据自己的需要或已有的数据唯一id作为主键,打算使用自定义的主键策略
各个版本可能实现原理不太一样,我从网上查看太多都没有合适的方法。
本项目使用springboot、jpa,版本为2.0.4.RELEASE,实现主键生成策略,步骤如下
1、新建类AssignedGUIDGenerator类
package com.fs;
import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentifierGenerator;
import org.hibernate.id.UUIDHexGenerator;
import java.io.Serializable;
public class AssignedGUIDGenerator extends UUIDHexGenerator implements IdentifierGenerator{
@Override
public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
Serializable id = session.getEntityPersister(ENTITY_NAME, object).getIdentifier(object, session);
if (id==null || id.toString().equals("")) {
id = super.generate(session,object);
}
return id;
}
}
2、增加实体类
@Id
@GeneratedValue(generator = "fsId")
@GenericGenerator(name = "fsId", strategy = "com.fs.AssignedGUIDGenerator")