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

基于Micronaut迁移至Hibernate 6:PostgreSQL枚举类型映射问题

问题描述

将基于Micronaut的应用迁移至Hibernate 6后,Java枚举与PostgreSQL枚举类型的映射出现错误。此前的配置如下:

旧的实体类注解

@TypeDef(
    name = "pgsql_enum",
    typeClass = PostgreSQLEnumType.class
)

枚举字段定义

@Enumerated(EnumType.STRING)
@Column(name = "status")
@Type(type = "pgsql_enum")
private StatusEnum status;

Java枚举类

public enum StatusEnum {
    APPROVAL,
    ACTIVE,
    COMPLETED,
}

PostgreSQL枚举类型定义

CREATE TYPE book.book_status_enum AS ENUM (
    'APPROVAL',
    'ACTIVE',
    'COMPLETED'
);

迁移后出现的错误

  • 保留@Enumerated(EnumType.STRING)时,错误提示:operator does not exist: book.book_status_enum = character varying
  • 移除@Enumerated(EnumType.STRING)后,错误提示:operator does not exist: book.book_status_enum = integer

已尝试的方案

  • 使用@Enumerated(EnumType.STRING)
  • 自定义Jakarta转换器
  • 结合使用@JdbcTypeCode(SqlTypes.ENUM)与@Type(PostgreSQLEnumType.class)
  • 在@Column注解中指定columnDefinition

请问如何在Micronaut环境下的Hibernate 6中,正确将StatusEnum映射至PostgreSQL枚举类型book.book_status_enum?


解决方案

Hibernate 6对PostgreSQL枚举的映射逻辑已简化,无需依赖旧版的PostgreSQLEnumType,按以下步骤配置即可解决类型不匹配问题:

  1. 清理旧配置
    删除实体类上的@TypeDef注解,同时移除字段上的@Type(type = "pgsql_enum")注解。

  2. 配置实体字段
    根据你的Hibernate版本选择对应配置:

    • Hibernate 6.2及以上版本:使用官方提供的PostgreSQL枚举专用处理类
      @Enumerated(EnumType.STRING)
      @Column(name = "status", columnDefinition = "book.book_status_enum")
      @JdbcType(PostgreSqlEnumJdbcType.class)
      private StatusEnum status;
      
    • Hibernate 6.1及以下版本:通过指定JDBC类型编码实现
      @Enumerated(EnumType.STRING)
      @Column(name = "status", columnDefinition = "book.book_status_enum")
      @JdbcTypeCode(SqlTypes.OTHER)
      private StatusEnum status;
      
  3. 确认方言配置
    在Micronaut的application.yml中确保指定了PostgreSQL方言:

    datasources:
      default:
        dialect: org.hibernate.dialect.PostgreSQLDialect
    
  4. 验证枚举一致性
    确保StatusEnum的枚举值与PostgreSQL中book.book_status_enum的枚举值完全一致(大小写、名称均需匹配)。

以上配置会让Hibernate正确识别PostgreSQL枚举类型,避免字符串/整数与枚举类型的不匹配错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:44:56