如何使用Hibernate作为字段的UUID?

时间:2014-03-03 14:32:21

标签: java hibernate uuid

我正在尝试使用没有@Id注释的生成的UUID,因为我的主键是其他东西。该应用程序不会生成UUID,您有什么想法吗?

这是我的声明:

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

我正在使用Hibernate 4.3.0和Oracle10g。

3 个答案:

答案 0 :(得分:8)

试试这可能会有所帮助

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

阅读此link读取hibernate文件是可能的

答案 1 :(得分:6)

检查GeneratedValue

的Javadoc
  

提供主键值的生成策略规范。

换句话说 - 只有一个注释才能初始化'none ID'属性。

但您可以使用@PrePersist

@PrePersist
public void initializeUUID() {
    if (uuid == null) {
        uuid = UUID.randomUUID().toString();
    }
}

答案 2 :(得分:2)

这不是因为您的UUID是主键,因此必须使用@GeneratedValue注释它。

例如,您可以执行以下操作:

public class MyClass
{
   @Id
   private String uuid;

   public MyClass() {}

   public MyClass (String uuid) {
      this.uuid = uuid;
   }
}

在您的应用中,在保存实体之前生成UUID:

String uuid = UUID.randomUUID().toString();
em.persist(new MyClass(uuid)); // em : entity manager