2011-06-15 161 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; 
}