Tha*_*cky 4 java hibernate auto-generate
我对 Spring Boot 很陌生,模型中有一个 Id(主键),它是 String,我需要在保存新实体时自动生成它。
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private String id;
private String name;
private String description;
Run Code Online (Sandbox Code Playgroud)
但是,保存新实体时出现此错误。
"message": "Unknown integral data type for ids : java.lang.String; nested exception is org.hibernate.id.IdentifierGenerationException:
Run Code Online (Sandbox Code Playgroud)
如何避免此错误并在id
保存新实体时自动生成。
auto
当您尝试将生成的值与字段一起使用时,这对您不起作用String
。
为了使其工作,您需要更改@GeneratedValue
注释以使用 agenerator
而不是 a strategy
,并添加一个@GenericGenerator
注释来命名生成器并指向策略。
例如,假设您想要生成自动生成的 UUID 作为表的 PK,您的代码将如下所示:
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(
name = "UUID",
strategy = "org.hibernate.id.UUIDGenerator"
)
@Column(updatable = false, nullable = false)
private String id;
Run Code Online (Sandbox Code Playgroud)
除了上述内容之外,您始终可以实现IdentifierGenerator
创建自己的生成器。您可以在这里查看更多信息:
如何使用 Hibernate 实现自定义字符串序列标识符生成器
@GeneratedValue(strategy = GenerationType.AUTO) 这将导致任何标识列、序列或表取决于基础数据库。
如果你看这里,你会注意到所有这些都生成了 long、short 或 int 类型的 id,而不是 String 类型的。
如果你想生成 Id 作为字符串,那么使用 generator="uuid" 如下
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private String id;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
10459 次 |
最近记录: |