关于使用jpa调用.save()方法出现 Unknown integral data type for ids : java.lang.String 错误

调用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

参考网上其他同学解决方案:

  1. d 的数据类型修改为 Long
  2. id 的生成策略修改为 sequence (如果您使用的是mysql数据库使用 native)
  3. 把主键 id 的生成策略修改为 uuid
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。