方式一: 推荐
如果你使用的是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 类型 尝试一下。