如何在JPA / Hibernate中使用字符串类型的@Id?

2022-09-01 03:50:17

我有一个实体,其中包含字符串类型的主键。此实体模型如下所示:

@Entity
public class MyEntity {

@Id
@Column(name="PR_KEY", unique=true)
private String prKey;

....
....

}

但是我面临着类型不匹配的问题。

org.hibernate.TypeMismatchException: Provided id of the wrong type. Expected: class java.lang.String, got class java.lang.Long

答案 1

如果未指定 id 生成策略,则 Hibernate 将使用 。这将导致任何GenerationType.AUTO

AUTO - 标识列、序列或表,具体取决于基础数据库。

如果您查看此处,您会注意到所有这些生成类型为 或 的 ID,而不是 类型 。longshortintString

假设您想要一个UUID作为ID,您可以使用String

@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "PR_KEY")
private String prKey;

答案 2

检查数据库表中PR_KEY数据类型。如果列的类型为 Number,并且您尝试将相同的列映射到实体中的字符串,则可能会出现此问题。

这同样适用于具有生成 Id 的 coulmn。


推荐