调用jpa自带的save()
方法出现
"Unknown integral data type for ids : java.lang.String; nested exception is org.hibernate.id.IdentifierGenerationException: Unknown integral data type for ids : java.lang.String"
出错原因:代码中我使用UUID生成主键,但在实体类中使用了@GenerateValue
注解指定了主键
lightPosition.setId(UUID.randomUUID().toString());
lightPosition.setCreateAt(System.currentTimeMillis());
lightPosition.setCreateBy(request.getUserId());
img
实体类定义
后来将@GeneratedValue
注解去掉解决了问题。
@GeneratedValue
注解包含以下内容
img
@GeneratedValue
strategy()
方法是指主键生成策略默认为.AUTO
其中有四种策略分别为:TABLE
,SEQUENCE
,IDENTITY
,AUTO
。
-AUTO主键由程序控制, 是默认选项 ,不设置就是这个
-IDENTITY 主键由数据库生成, 采用数据库自增长, Oracle不支持这种方式
-SEQUENCE 通过数据库的序列产生主键, MYSQL 不支持
-Table 提供特定的数据库产生主键, 该方式更有利于数据库的移植
解决方法:我的项目中去掉@GenerateValue
因为在项目中id使用的uuid
参考网上其他同学解决方案:
- d 的数据类型修改为 Long
- id 的生成策略修改为 sequence (如果您使用的是mysql数据库使用 native)
- 把主键 id 的生成策略修改为 uuid