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

Hibernate 6实体错误:无法确定JavaType——BasicValue([Column(ID)])

解决Oracle NUMBER列与Java Long类型映射的Hibernate错误

问题重现

实体类代码:

// Entity
@Id
private Long id;

对应Oracle数据库的ID列类型为NUMBER,启动Spring Boot时抛出错误:

Unable to determine JavaType to use : BasicValue([Column(ID)])

已尝试@GeneratedValue、@JavaType注解但未解决。

解决方案

以下是几个实际可行的排查和修复步骤:

  • 确保Oracle JDBC驱动版本匹配
    驱动版本不兼容是常见诱因,比如Oracle 12c+应使用ojdbc8,低版本驱动可能无法正确识别NUMBER到Long的映射。Maven示例配置:

    <dependency>
        <groupId>com.oracle.database.jdbc</groupId>
        <artifactId>ojdbc8</artifactId>
        <scope>runtime</scope>
    </dependency>
    
  • 显式指定列定义
    给@Column注解添加columnDefinition,明确Oracle列的精度(Long是64位整数,对应NUMBER(19,0)足够):

    @Id
    @Column(name = "ID", columnDefinition = "NUMBER(19,0)")
    private Long id;
    

    这能强制Hibernate识别列的整数类型,避免模糊匹配。

  • 配置正确的Hibernate方言
    在Spring Boot配置文件中指定对应Oracle版本的方言,不同方言的类型映射逻辑不同:

    # Oracle 12c及以上版本使用
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
    
  • 修正@JavaType的用法
    如果必须用@JavaType,要导入正确的Hibernate类型类,避免错误的实现:

    import org.hibernate.type.descriptor.java.LongJavaType;
    
    @Id
    @JavaType(LongJavaType.class)
    @Column(name = "ID")
    private Long id;
    
  • 注意:@GeneratedValue不解决类型映射问题
    @GeneratedValue仅用于指定主键生成策略(比如自增、序列),和类型识别错误无关,单独添加它无法解决当前问题。

内容的提问来源于stack exchange,提问作者Joshua Ondieki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:04:56