如何在 JPA Hibernate 映射中将 GUID(不是 PK)添加到已经具有 PK(整数)的现有实体

Posted

技术标签:

【中文标题】如何在 JPA Hibernate 映射中将 GUID(不是 PK)添加到已经具有 PK(整数)的现有实体【英文标题】:How to add a GUID (Not a PK) to an existing entity that already has a PK(Integer) in JPA Hibernate Mapping 【发布时间】:2012-09-14 06:53:39 【问题描述】:

我已经有一个 id 为 Integer 的实体类。作为要求,我们需要为此添加一个 GUID,目前不会是 PK。但是每当创建新实体时都应该自动填充。 (现有的会将这个新的列 GUID 设为 NULL)。此表中的每个新条目都没有填充 GUID(以 NULL 形式出现)。请帮忙。

@实体

@Table(name = "TABLEA")

公开课表A

private int id;

private String guid;   

@Id
@GenericGenerator(name = "sequence", strategy = TableNameSequenceGenerator.TABLE_NAME_SEQUENCE_GENERATOR)
@GeneratedValue(generator = "sequence")
@Column(name = "ID")
public int getId()

    return id;


public void setId(int id)

    this.id = id;



@GenericGenerator(name = "guidGenerator", strategy = "guid")
@GeneratedValue(generator = "guidGenerator")
@Column(name = "GUID")
public String getGuid()

    return guid;


public void setGuid(String guid)

    this.guid = guid;

【问题讨论】:

【参考方案1】:

如果您创建一个变量 ex,则有一个名为 Guid 的类。 Guid guid = new Guid();

然后你可以使用guid = Guid.NewGuid(),你可以在你返回guid的方法中使用它,它每次都会生成一个新的Guid。

我想有一种不同的方法,但我就是这样做的。

希望对您有所帮助。

【讨论】:

可能这个 Guid.NewGuid() 在 C# 中。我需要 JAVA 中的解决方案。使用 Hibernate JPA。 一次更正。我没有将 @Id 放在 GUID 列映射上。 我尝试通过 tableA.setGuid(GUID.generateGUID());但现在得到“嵌套异常是 java.sql.SQLException:ORA-01465:无效的十六进制数”。似乎生成的 GUID 不是十六进制数。任何帮助将不胜感激。

以上是关于如何在 JPA Hibernate 映射中将 GUID(不是 PK)添加到已经具有 PK(整数)的现有实体的主要内容,如果未能解决你的问题,请参考以下文章

如何在pojo中用jpa或hibernate映射json字段?

如何使用 JPA 和 Hibernate 映射计算的属性

如何使用 JPA 和 Hibernate 映射 PostgreSQL 枚举

如何使用 JPA/Hibernate 注释将 MySQL char(n) 列映射到实例变量?

如何使用 Spring Data JPA(Hibernate) 跨映射表过滤关联实体?

如何在同一个数据库表上映射两个 JPA 或 Hibernate 实体