我有一个数据库,其中包含以下ID规范:
code:VARCHAR(3) - 这是主键,是一个最大的String 长度为3个字符
我正在以下列方式映射Id:
@Id
@GeneratedValue
private String code;
我在尝试调用session.save()
时收到此错误:
线程“main”中的异常 org.hibernate.id.IdentifierGenerationException:未知的整数数据 ids的类型:java.lang.String
我错过了什么?
谢谢! :)
答案 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。