通过注解使用Hibernate UUIDGenerator| Java Debug 笔记

1,108 阅读1分钟

本文正在参加「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…