我有以下代码。因为该@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数据库密钥的优缺点
如果对默认生成器不满意,则可以通过以下方式定义自己的生成器;
@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 } }
使用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数据库密钥的优缺点