java - 单个非标识字段中的 Hibernate UUID 生成器

标签 java hibernate uuid

我试图在 DB 模型中强制 hibernate 生成 UUID 字段,但问题是该字段不是主要的 @Id 字段,无法以这种方式完成。

我的模型是这样的:

@Entity
@Table(name = "myModel")
public class MyModel {
    private Long id;
    private UUID uuid;

    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Column(columnDefinition = "BINARY", length = 16)
    @GenericGenerator(name = "uuid", strategy = "uuid2")
    public UUID getUuid() {
        return uuid;
    }

    public void setUuid(UUID uuid) {
        this.uuid = uuid;
    }
}

还有其他方法可以实现这个策略吗?

更新:

@Entity
@Table(name = "myModel")
public class MyModel {
    private Long id;
    private UUID uuid;

    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Column(columnDefinition = "BINARY", length = 16)
    @Type(type="uuid-binary")
    public UUID getUuid() {
        return uuid;
    }

    public void setUuid(UUID uuid) {
        this.uuid = uuid;
    }
}

注意 @GenericGenerator 不再需要,因此已被删除。

最佳答案

为此可以使用下面的代码

public UUID getUuid() {
    return uuid == null ? UUID.randomUUID() : uuid;
}

发布这个已经很晚了,但它可能会对其他人有所帮助。

关于java - 单个非标识字段中的 Hibernate UUID 生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24511561/

相关文章:

java - maven weblogic 安全 jar

java - 使用基于键列表的流过滤器映射

java - 是否可以不将 servlet 过滤器投入使用?

java - 在 Servlet session 中缓存 Hibernate 实体

java - 在应用程序安装时设置唯一 ID - Android

database - 为什么使用应用程序生成自定义 uuid 而不是数据库 id?

java - 如何从java调用python脚本并返回长文本?

entity-framework - NHibernate 的三级缓存

hibernate - org.hibernate.hql.ast.QueryTranslatorImpl 列表注意 : firstResult/maxResults specified with collection fetch; applying in memory

uuid - 我应该检查 UUID 冲突吗?