未知的积分数据类型

时间:2017-09-27 10:35:27

标签: java hibernate jpa hibernate-mapping hibernate-annotations

我有一个数据库,其中包含以下ID规范:

  

code:VARCHAR(3) - 这是主键,是一个最大的String   长度为3个字符

我正在以下列方式映射Id:

    @Id
    @GeneratedValue
    private String code;

我在尝试调用session.save()时收到此错误:

  

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

我错过了什么?

谢谢! :)

2 个答案:

答案 0 :(得分:1)

使用普通@GeneratedValue不会做的技巧,因为它带有GenerationType.AUTO选项,它告诉持久性提供程序自己决定策略,但是在String的情况下,它无法解决任何解决方案。

通常你会选择uuid自定义生成策略,但这会产生长度= 32的字符串,这比你的列可以处理的更多。

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

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

答案 1 :(得分:1)

@GeneratedValue 

不能与String类型一起使用,因为它将返回Integer类型。因此,如果要将String用作ID,则必须手动分配。但如果符合您的需要,可以使用String作为ID。