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

Hibernate 6.2:Java枚举与Postgres枚举映射报错求助

Postgres枚举与Java枚举映射报错解决方案

问题场景

  • 技术栈:Spring Boot 3.1.0 + Spring Data(Hibernate 6.2) + Postgres 14.4.0 + io.hypersistence:hypersistence-utils-hibernate-62:3.5.1
  • Postgres枚举定义:
CREATE TYPE event_type AS ENUM ('usercreated', 'userupdated', 'userdeleted');
  • Java枚举:
public enum EventType {
  usercreated,
  userupdated,
  userdeleted
}
  • 初始实体映射代码:
@Enumerated(EnumType.STRING)
@Column(name = "event_type", nullable = false)
@Type(PostgreSQLEnumType.class)
private EventType eventType;

错误信息

Caused by: org.hibernate.MappingException: Unable to determine SQL type name for column 'event_type' of table 'user_updates'
    at org.hibernate.mapping.Column.getSqlTypeName(Column.java:281)
    at org.hibernate.mapping.Column.getSqlType(Column.java:339)
    at org.hibernate.tool.schema.internal.ColumnDefinitions.hasMatchingType(ColumnDefinitions.java:28)
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.validateColumnType(AbstractSchemaValidator.java:163)
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.validateTable(AbstractSchemaValidator.java:152)
    at org.hibernate.tool.schema.internal.GroupedSchemaValidatorImpl.validateTables(GroupedSchemaValidatorImpl.java:46)
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.performValidation(AbstractSchemaValidator.java:97)
    at org.hibernate.tool.schema.internal.AbstractSchemaValidator.doValidation(AbstractSchemaValidator.java:75)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:293)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:143)
    at java.base/java.util.HashMap.forEach(HashMap.java:1421)
    at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:140)
    at org.hibernate.boot.internal.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:37)
    at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35)
    at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:291)
    at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:431)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1455)
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:66)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:376)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
    ... 25 common frames omitted
Caused by: org.hibernate.HibernateException: No type mapping for org.hibernate.type.SqlTypes code: 1111 (OTHER)
    at org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.getTypeName(DdlTypeRegistry.java:205)
    at org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.getTypeName(DdlTypeRegistry.java:184)
    at org.hibernate.mapping.Column.getSqlTypeName(Column.java:277)
    ... 44 common frames omitted

解决方案

1. 移除冲突注解

@Enumerated(EnumType.STRING)与@Type(PostgreSQLEnumType.class)存在冲突,后者专门用于处理Postgres原生枚举,无需保留前者。

2. 显式指定列的SQL类型

在@Column注解中添加columnDefinition,明确该列对应Postgres的枚举类型名称:

@Column(name = "event_type", nullable = false, columnDefinition = "event_type")
@Type(PostgreSQLEnumType.class)
private EventType eventType;

3. 确认Hibernate方言配置

确保Spring Boot配置中使用正确的Postgres方言,Hibernate 6推荐配置:

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

4. 提前创建Postgres枚举类型

Hibernate不会自动生成Postgres枚举类型,需手动在数据库中执行创建语句:

CREATE TYPE event_type AS ENUM ('usercreated', 'userupdated', 'userdeleted');

内容的提问来源于stack exchange,提问作者Ali Behzadian Nejad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:45:13