当前位置:  开发笔记 > 编程语言 > 正文

为实体生成不可预测的随机@Id

如何解决《为实体生成不可预测的随机@Id》经验,为你挑选了2个好方法。

我有以下代码。因为该@Id值是在my中顺序生成的MariaDB,所以这是不安全的:我需要在客户端中公开它。这就是为什么我想要一个不可预测的random @Id。我应该如何更改代码?

@Entity
public class Item implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id; // Automatic generated value

    // other fields, getters, setters & constructors
}

buræquete.. 6

如果对默认生成器不满意,则可以通过以下方式定义自己的生成器;

@Entity
public class Item implements Serializable {

    @Id
    @GeneratedValue(generator = MyGenerator.generatorName)
    @GenericGenerator(name = MyGenerator.generatorName, strategy = "a.b.c.MyGenerator")
    private String id;

    // rest of the entity
}

还有发电机本身;

public class MyGenerator implements IdentifierGenerator {

    public static final String generatorName = "myGenerator";

    @Override
    public Serializable generate(SharedSessionContractImplementor sharedSessionContractImplementor, Object object) throws HibernateException {
        return UUID.randomUUID().toString().replace("-", "");
        // or any other logic you'd like for generating unique IDs
    }
}


Panupong Kon.. 5

使用Hibernate和UUID标识符

UUID十六进制生成器是最早的UUID标识符生成器,​​它以“ uuid”类型注册。它可以生成具有以下模式的32个十六进制UUID字符串值(也可以使用分隔符):8 {sep} 8 {sep} 4 {sep} 8 {sep} 4。

@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(columnDefinition = "CHAR(32)")
@Id
private String id;

UUID标识符的一件事对于MySQL(GenerationType.IDENTITY)和Oracle(GenerationType.SEQUENCE)都适用,用于将Hibernate自动密钥生成为一个Entity类。

GUID / UUID数据库密钥的优缺点



1> buræquete..:

如果对默认生成器不满意,则可以通过以下方式定义自己的生成器;

@Entity
public class Item implements Serializable {

    @Id
    @GeneratedValue(generator = MyGenerator.generatorName)
    @GenericGenerator(name = MyGenerator.generatorName, strategy = "a.b.c.MyGenerator")
    private String id;

    // rest of the entity
}

还有发电机本身;

public class MyGenerator implements IdentifierGenerator {

    public static final String generatorName = "myGenerator";

    @Override
    public Serializable generate(SharedSessionContractImplementor sharedSessionContractImplementor, Object object) throws HibernateException {
        return UUID.randomUUID().toString().replace("-", "");
        // or any other logic you'd like for generating unique IDs
    }
}



2> Panupong Kon..:

使用Hibernate和UUID标识符

UUID十六进制生成器是最早的UUID标识符生成器,​​它以“ uuid”类型注册。它可以生成具有以下模式的32个十六进制UUID字符串值(也可以使用分隔符):8 {sep} 8 {sep} 4 {sep} 8 {sep} 4。

@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(columnDefinition = "CHAR(32)")
@Id
private String id;

UUID标识符的一件事对于MySQL(GenerationType.IDENTITY)和Oracle(GenerationType.SEQUENCE)都适用,用于将Hibernate自动密钥生成为一个Entity类。

GUID / UUID数据库密钥的优缺点

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有