自定义主键生成器


1. 编写MyIdGenerator

  • 这是我们自己的id生成器,首先要继承org.hibernate.id.IdentifierGenerator接口,并实现generate方法,方法返回值即是生成的id
package com.example.springboot.mysqldemo.util;

import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.id.IdentifierGenerator;

import java.io.Serializable;
import java.util.UUID;

public class MyIdGenerator implements IdentifierGenerator {

    public static final String TYPE = "com.example.springboot.mysqldemo.util.MyIdGenerator";

    @Override
    public Serializable generate(SharedSessionContractImplementor sharedSessionContractImplementor, Object o) throws HibernateException {
    	// 简单示例
        String uuid= UUID.randomUUID().toString();
        System.out.println("my:"+uuid);
        return "my:"+uuid;
    }
}

2. 实体中添加改id生成器

  • 给id添加如下注解,strategy 指向我们的id生成器

@GenericGenerator(name = “myGenerator”, strategy = “com.example.springboot.mysqldemo.util.MyIdGenerator”)
@GeneratedValue(generator = “myGenerator”)

@Entity
@Table(name = "User_Info")
public class UserInfo {

    private String id;

    private String name;

   //....


    @JsonProperty
    @Id
    @GenericGenerator(name = "myGenerator", strategy = "com.example.springboot.mysqldemo.util.MyIdGenerator")
    @GeneratedValue(generator = "myGenerator")
    @Column(name = "ID", unique = true, nullable = false, length = 36)
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @JsonProperty
    @Column(name = "name",  length = 136)
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

       //....

}

3. 测试

@RestController
@RequestMapping("/index")
@ImportResource(locations = { "classpath:druid-bean.xml" })
public class IndexController {
    @Autowired
    private UserInfoDao userInfoDao;

    @RequestMapping("/addUserInfo")
    public UserInfo getIndex(String name) {
        UserInfo userInfo=new UserInfo();
        userInfo.setName(name);
        userInfoDao.save(userInfo);
        return userInfo;
    }
}

在这里插入图片描述

  • success
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值