java 自定义主键生成策略UUID,避免接口传入的主键被覆盖(保存时允许自定义的ID)

数据表的数据来源有两种情况的适用,如:1,通过接口(自带主键)新增,2,本系统新增;

原理:就是保存数据之前先判断 是否有ID有,则直接用,没有再生成;

import java.io.Serializable;

import org.hibernate.MappingException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.UUIDGenerator;

public class CustomUUIDGenerator extends UUIDGenerator {
	
	@Override
	public Serializable generate(SharedSessionContractImplementor session, Object object) throws MappingException {
		Serializable id = IdHelper.getId(object);
        if (id != null && !"".equals(id)) {
            return id;
        }
        return super.generate(session, object);	//这里也可以改成自己的UUID生成方法;
    }
}

import com.alibaba.fastjson.JSONObject;

public class IdHelper {
	
	/**
	 * 从对象中获取主键(id)字段
	 * @Time 2020年6月11日 下午7:25:10
	 * @param obj
	 * @return
	 */
	public static Serializable getId(Object obj) {
		if(obj != null) {
			JSONObject json = (JSONObject) JSONObject.toJSON(obj);
			return json.getString("id");
		}
		return null;
	}
}

实体中主键上的注解配置如下:
注意:generator = “custom-uuid” 一定要和 @GenericGenerator 中的name值相同

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "custom-uuid")
	@GenericGenerator(name = "custom-uuid", strategy = "com.sgcc.sys.common.utils.CustomUUIDGenerator")
	@Column(name = "ID", nullable = false, length = 64)
	private String id;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值