未知的整数数据类型

Unknown integral data type

我有一个 ID 规格如下的数据库:

code: VARCHAR(3) - this is the primary key, a String with a maximum length of 3 characters

并且我通过以下方式映射 ID:

    @Id
    @GeneratedValue
    private String code;

我在尝试调用 session.save():

时遇到此错误

Exception in thread "main" org.hibernate.id.IdentifierGenerationException: Unknown integral data type for ids : java.lang.String

我错过了什么?

谢谢! :)

使用普通 @GeneratedValue 不会解决问题,因为它带有 GenerationType.AUTO 选项,该选项告诉持久性提供者自行决定策略,但在 String 的情况下,它无法解决任何解决方案盒子的。

通常您会选择 uuid 自定义生成策略,但这会导致长度为 32 的字符串超出您的列可以处理的范围。

如果你真的想避免每次保存前手动设置 id,你可以利用 PrePersist 实体监听器:

@PrePersist
private void generateCodeIdentifier(){
    setCode(/* Generate the unique code identifier */);
}
@GeneratedValue 

不能与String类型一起使用,因为它会returnInteger类型。所以,如果你想使用 String 作为 ID,你必须手动分配它。但如果适合您的需要,使用字符串作为 ID 也可以。