2011-06-15 47 views
55

我用我的UUID如下:通过注释中使用Hibernate UUIDGenerator

@Id 
@GeneratedValue(generator = "uuid") 
@GenericGenerator(name = "uuid", strategy = "uuid") 
@Column(name = "uuid", unique = true) 
private String uuid; 

,但我得到一个智能休眠警告:

使用 org.hibernate.id.UUIDHexGenerator 这不会生成符合UUID值的IETF RFC 4122 ;考虑使用 org.hibernate.id.UUIDGenerator代替

所以我想切换到org.hibernate.id.UUIDGenerator,现在我的问题是我应该怎么告诉它Hibernate的发电机。我看到一些人用它作为一个“休眠的UUID” - 所以这是我尝试过,但阴性结果:

@Id 
@GeneratedValue(generator = "hibernate-uuid") 
@GenericGenerator(name = "hibernate-uuid", strategy = "hibernate-uuid") 
@Column(name = "uuid", unique = true) 
private String uuid; 

回答

83

它应该是uuid2

... 
@GenericGenerator(name = "uuid", strategy = "uuid2") 
... 

5.1.2.2.1. Various additional generators

+4

[它是4.1相同(http://docs.jboss.org/hibernate/orm/4.1/manual/en-美国/ html_single /#映射声明-ID)。另请注意,它使用java.util.UUID.randomUUID()。 – CorayThan 2013-05-01 18:15:31

+9

一个简单的@Id @GeneratedValue private java.util.UUID id;' 在Hibernate 5+中工作。请参阅[文档](http://docs.jboss.org/hibernate/orm/5.0/userguide/html_single/Hibernate_User_Guide.html#identifiers)。 – 2016-06-10 09:11:16

14

HibernateDoc说,你可以使用下列内容:

@Id 
@GeneratedValue(generator="system-uuid") 
@GenericGenerator(name="system-uuid", strategy = "uuid") 
@Column(name = "uuid", unique = true) 
private String uuid; 

我希望你使用Hibernate 3.5。

9

的Try ...

@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; 
} 

注意 “UUID2”,而不是 “的uuid”。

3

未知Id.generator:休眠的UUID

@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; 
}