You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 11:29:49