未知的整数数据类型
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 也可以。
我有一个 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 也可以。