数据实体类主键使用UUID生成策略

方式一:        推荐

        如果你使用的是JPA进行数据持久化操作的开发者,如何在实体类中配置UUID作为主键生成策略。通过@Entity、@Table、@GenericGenerator和@GeneratedValue等注解,可以实现自动为数据实体生成唯一的UUID主键,无需手动设置id字段。在执行save方法后,JPA将自动生成并插入32位长度的UUID到数据库对应的主键字段。

import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.io.Serializable;

@Entity
@Getter
@Setter
@GenericGenerator(name = "jpa-uuid", strategy = "uuid")
@Table(name="sys_user")
public class UserEntity implements Serializable {
    @Id
    @GeneratedValue(generator = "jpa-uuid")
    @Column(name = "uuid", length = 32)
    private String uuid;

    @Column(name = "name")
    private String name;
}
方式二:

        使用@PrePersist注解来在对象被持久化到数据库之前生成一个UUID作为主键。

        首先你需要在你的实体类中使用@PrePersist注解标注一个方法,该方法负责生成UUID。

        在这个例子中,当你尝试将UserEntity对象保存到数据库中时,实际执行INSERT语句之前调用onCreate方法。如果id属性是null,方法内部会生成一个UUID并赋值给id属性。这样,每次保存UserEntity对象时,都会自动生成一个UUID作为主键。

import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.io.Serializable;
import java.util.UUID;

@Entity
@Getter
@Setter
@Table(name="sys_user")
public class UserEntity implements Serializable {

    @PrePersist
    protected void onCreate() {
        if (this.uuid == null) {
            this.uuid = UUID.randomUUID().toString();
        }
    }

    @Id
    @Column(name = "uuid", length = 32)
    private String uuid;
}
方式三:      不推荐 可能存在问题

        当你创建一个YourEntity对象时,它会自动生成一个UUID作为其ID。

        如果你想在数据库中使用UUID作为主键,确保你的数据库支持UUID类型的字段,并在实体类中适当地注解该属性,例如使用JPA的 @Id 和 @GeneratedValue 注解:

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
 
@Entity
@Getter
@Setter
@Table(name="your_table")
public class YourEntity {
    
    public YourEntity() {
        this.id = UUID.randomUUID();
    }

    @Id
    @GeneratedValue
    private UUID id;
 
    // 其他的属性和方法
}

如果不支持UUID,这种方式有的可能会有问题 这时去掉 @GeneratedValue 或改成String 类型 尝试一下。

你可能感兴趣的:(java,数据库,sql,spring,boot)