Spring Boot+Hibernate操作SQLite时遇GenerationType UUID缺失错误
问题解决:Spring Boot+Hibernate启动报错「Class jakarta.persistence.GenerationType does not have member field 'jakarta.persistence.GenerationType UUID'」
错误根源
该错误由Jakarta Persistence API与Hibernate版本不兼容导致:
GenerationType.UUID是Jakarta Persistence 3.1新增的枚举值- 你的Spring Boot 3.3.4默认依赖Jakarta Persistence 3.1,但手动引入了
jakarta.persistence-api:3.0.0,同时指定了hibernate-core:6.2.0.Final。但错误栈显示实际加载的是Hibernate 6.5.3(Spring Boot starter间接引入的更高版本),高版本Hibernate会尝试访问Jakarta Persistence 3.1中的UUID枚举,而3.0.0版本无此字段,最终触发错误。 - 额外说明:
spring-boot-starter-data-jpa已包含适配版本的Hibernate和Jakarta Persistence API,手动指定这些依赖会破坏版本一致性。
修复步骤
1. 清理冲突依赖
修改build.gradle.kts,移除手动指定的jakarta.persistence-api和hibernate-core,让Spring Boot starter自动管理版本:
implementation("org.springframework.boot:spring-boot-starter-websocket") implementation("commons-codec:commons-codec:1.18.0") // database driver implementation("org.xerial:sqlite-jdbc:3.41.2.2") //dialect for hibernate implementation("com.github.gwenn:sqlite-dialect:0.1.0") // 仅保留starter,自动引入适配的Hibernate与Jakarta Persistence版本 implementation("org.springframework.boot:spring-boot-starter-data-jpa") compileOnly("org.projectlombok:lombok") // 新增注解处理器,确保Lombok能正常生成getter/setter annotationProcessor("org.projectlombok:lombok")
2. 配置SQLite方言
在application.properties或application.yml中添加Hibernate方言配置:
spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.dialect=org.sqlite.hibernate.dialect.SQLiteDialect spring.jpa.show-sql=true
3. 实体类优化(可选)
你的Value实体中,TimeStamp用String存储Instant,建议直接使用Instant类型,Hibernate会自动处理与SQLite的类型映射:
@Entity @Table @Getter @Setter public class Value { @Id private int ValueID; private int TypeID; // 替换为Instant类型 private Instant TimeStamp; private int Value; private int Loc; public static Value createValue(SimpleLocValue model) { Value value = new Value(); value.setValue(model.getValue()); value.setLoc(model.getLoc()); value.setTypeID(0); // 直接赋值Instant,无需转字符串 value.setTimeStamp(Instant.now()); return value; } }
验证修复
执行./gradlew clean build清理并构建项目,重新启动应用即可解决启动错误。
内容的提问来源于stack exchange,提问作者Huchsle
相关产品推荐
相关产品推荐

