Java 未知整数数据类型

Java 未知整数数据类型,java,hibernate,jpa,hibernate-mapping,hibernate-annotations,Java,Hibernate,Jpa,Hibernate Mapping,Hibernate Annotations,我有一个具有以下ID规范的数据库: 代码:VARCHAR(3)-这是主键,一个最大值为 长度为3个字符 我用以下方式映射Id: @Id @GeneratedValue private String code; 我在尝试调用会话.save()时遇到此错误。: 线程“main”中出现异常 org.hibernate.id.IdentifierGenerationException:未知的整数数据 ID的类型:java.lang.String 我错过了什么 谢谢!:) 使用普

我有一个具有以下ID规范的数据库:

代码:VARCHAR(3)-这是主键,一个最大值为 长度为3个字符

我用以下方式映射Id:

    @Id
    @GeneratedValue
    private String code;
我在尝试调用
会话.save()时遇到此错误。

线程“main”中出现异常 org.hibernate.id.IdentifierGenerationException:未知的整数数据 ID的类型:java.lang.String

我错过了什么


谢谢!:)

使用普通的
@GeneratedValue
不会奏效,因为GenerationType.AUTO选项会告诉持久性提供程序自行决定策略,但如果是字符串,它无法立即解决任何问题

通常情况下,您会选择
uuid
自定义生成策略,但这会导致字符串长度=32,这是您的列无法处理的

如果确实希望避免每次保存前手动设置id,可以利用
PrePersist
实体侦听器:

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

不能与字符串类型一起使用,因为它将返回整数类型。所以,如果您想使用字符串作为ID,您必须手动分配它。但如果满足您的需要,可以使用字符串作为ID。

这意味着GeneratedValue应该是整数而不是java.lang.Strings生成ID的目的是什么?在保存之前需要一些java代码吗?怀疑数据库..数据库规范说:“VARCHAR(3)-这是主键,一个最大长度为3个字符的字符串”,所以它是一个字符串…谢谢!我刚刚读到Hibernate不支持字符串,除了uuid,它有您刚才指出的问题。
@GeneratedValue