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

Spring Boot+Hibernate+Pgvector环境下向量字段映射报错:无法识别SqlTypes.VECTOR类型

Spring Boot+Hibernate+Pgvector环境下向量字段映射报错:无法识别SqlTypes.VECTOR类型

我之前踩过类似的坑,你遇到的这个报错核心是Hibernate没能正确绑定Pgvector的向量类型与Java类型,虽然加了hibernate-vector模块,但还有几个关键配置没到位,咱们一步步排查:

1. 先解决依赖版本冲突问题

你提到用的是Spring Boot 3.5.X,但pom里spring-boot-starter-data-jpa的版本是3.2.3,这会导致严重的依赖冲突——Spring Boot 3.2.x默认依赖的Hibernate是6.2.x,而你手动指定了Hibernate 6.6.8,版本不兼容会让hibernate-vector模块无法正常生效。

修复方案:

  • 统一Spring Boot版本:把所有spring-boot-starter-*依赖的版本改成3.5.x(比如3.5.0),让Spring Boot来管理Hibernate的版本(确保和3.5.x兼容的Hibernate版本);
  • 确保hibernate-core和hibernate-vector版本完全一致:如果手动指定Hibernate版本,要保证两个依赖的版本号完全相同,比如都用6.6.8.Final,并且${hibernate.version}属性要正确配置。

调整后的依赖片段参考:

<properties>
    <spring.boot.version>3.5.0</spring.boot.version>
    <hibernate.version>6.6.8.Final</hibernate.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>${spring.boot.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
        <version>${spring.boot.version}</version>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.7.2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-model-ollama</artifactId>
        <version>1.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.orm</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>${hibernate.version}</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate.orm</groupId>
        <artifactId>hibernate-vector</artifactId>
        <version>${hibernate.version}</version>
    </dependency>
</dependencies>

2. 确认Postgres已创建Pgvector扩展

这是很容易忽略的前提:必须先在你的Postgres数据库中执行以下SQL,创建vector扩展,否则数据库本身不支持向量类型,Hibernate自然无法映射:

CREATE EXTENSION IF NOT EXISTS vector;

3. 调整实体类的向量字段注解

你当前用的@JdbcTypeCode(SqlTypes.VECTOR_FLOAT32)和@Array组合并不完全适配Hibernate Vector模块的用法,推荐两种更可靠的写法:

写法一:用Java原生数组+正确的JDBC类型

import org.hibernate.type.SqlTypes;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity(name = "ENTITY")
public class YourEntity {
    @Id
    private Long id;

    @Column(name = "embedding", columnDefinition = "vector(768)")
    @JdbcTypeCode(SqlTypes.VECTOR)
    private float[] embedding;

    // 其他字段、getter/setter
}

这里columnDefinition明确指定数据库字段类型为vector(768),和你的向量维度对应。

写法二:用Hibernate提供的Vector类型(更推荐)

Hibernate Vector模块提供了org.hibernate.vector.Vector类型,直接用这个类型可以省去很多注解配置:

import org.hibernate.vector.Vector;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity(name = "ENTITY")
public class YourEntity {
    @Id
    private Long id;

    @Column(name = "embedding", columnDefinition = "vector(768)")
    private Vector embedding;

    // 其他字段、getter/setter
}

这个类型会自动映射到Pgvector的vector类型,兼容性更好。

4. 检查Hibernate方言配置

确保你的Spring Boot配置中使用的Postgres方言支持向量类型,新版Hibernate会自动通过hibernate-vector模块扩展方言,但如果还是有问题,可以在application.properties或application.yml中明确指定:

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect

最后总结常见坑

  • 版本不兼容:Spring Boot和Hibernate版本必须匹配,hibernate-core和hibernate-vector版本必须完全一致;
  • 数据库未创建vector扩展:这是前置条件,一定要先执行扩展创建SQL;
  • 实体注解错误:避免混用不兼容的注解,优先用Hibernate Vector模块推荐的写法。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 08:44:32