本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看 活动链接
通过注解使用Hibernate UUIDGenerator
我像下面那样使用我的UUID
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "uuid", unique = true)
private String uuid;
但我遇到了一个Hibernate的警告:
Using org.hibernate.id.UUIDHexGenerator which does not generate IETF RFC 4122 compliant UUID values; consider using org.hibernate.id.UUIDGenerator instead
所以我想切换到org.hibernate.id.UUIDGenerator,现在我的问题是如何将它传递给Hibernate generator。我看到一些人使用了“hibernate-uuid”——下面就是我所尝试的,但结果是错误的:
@Id
@GeneratedValue(generator = "hibernate-uuid")
@GenericGenerator(name = "hibernate-uuid", strategy = "hibernate-uuid")
@Column(name = "uuid", unique = true)
private String uuid;
回答一
在当前的5.4.2 Hibernate版本中,
如果你想在数据库表中有一个Human-Readable varchar(36)字段,
也是Java类中可序列化的UUID数据类型,
你可以在使用java.util.UUID类型声明字段成员的同时使用@Type(type = "uuid-char")。
注意@Column(length = 36)对于将MySQL中的字段长度从255减少到36非常重要。
注意,在PostgreSQL中,你应该使用@Type(type = "pg-uuid")。
import org.hibernate.annotations.Type
import java.util.UUID
import javax.persistence.Column
import javax.persistence.GeneratedValue
import javax.persistence.Id
@Id @GeneratedValue
@Type(type = "uuid-char") @Column(length = 36)
private UUID id;
回答二
尝试一下:
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(name = "uuid", columnDefinition = "BINARY(16)")
public UUID getId()
{
return id;
}
public void setId(UUID i)
{
id = i;
}
回答三
HibernateDoc指出可以像下面那样使用
@Id
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
@Column(name = "uuid", unique = true)
private String uuid;
我希望你使用的是Hibernate 3.5.
回答四
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator")
@Column(name = "id", unique = true)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
文章翻译自Stack Overflow:stackoverflow.com/questions/6…