升级到Hibernate5时保存vividsolutions.jts.geom.Polygonal属性报Oracle类型错误
解决方案
根因说明
Hibernate 5 调整了空间类型的默认绑定逻辑,你当前使用的OracleSpatial10gDialect默认适配的是org.locationtech.jts包下的几何类型,无法识别你正在用的旧版com.vividsolutions.jts类型,导致Hibernate直接将几何数据序列化为二进制传入数据库,和Oracle端要求的MDSYS.SDO_GEOMETRY类型不匹配。
你可以按照以下步骤修复,全程不需要引入vividsolutions之外的额外依赖:
- 第一步:更换适配的Hibernate方言
不要使用旧的10g空间方言,改用适配新版Oracle的OracleSpatial12cDialect,该方言兼容19c版本,且支持旧版vividsolutions JTS类型映射。
Spring Boot配置示例:spring.jpa.properties.hibernate.dialect=org.hibernate.spatial.dialect.oracle.OracleSpatial12cDialect - 第二步:修正实体字段的注解配置
在@Column注解中显式指定列定义为MDSYS.SDO_GEOMETRY,避免Hibernate自动将字段类型推断为二进制:@XmlTransient @Column(name = GEOMETRY_COLUMN_NAME, columnDefinition = "MDSYS.SDO_GEOMETRY") @Type(type = "org.hibernate.spatial.GeometryType") private Polygonal shape; - 第三步:校验依赖版本一致性
确保你引入的hibernate-spatial依赖版本和你当前使用的hibernate-core版本完全一致(你的核心版本为5.4.29.Final,需对应相同版本的hibernate-spatial),版本不匹配会导致空间类型映射失效。 - 可选:手动配置类型映射
如果完成以上三步仍有问题,可以在Hibernate配置中添加自定义类型绑定,强制将com.vividsolutions.jts下的几何类型关联到Hibernate的空间类型处理器:spring.jpa.properties.hibernate.type.com.vividsolutions.jts.geom.Polygonal=org.hibernate.spatial.GeometryType
内容的提问来源于stack exchange,提问作者Lockerbee
相关产品推荐
相关产品推荐

