记一次springboot jpa更新复杂几何类型报错Only simple geometries should be used

文章讨论了在更新数据时,由于使用了MultiPolygon类型的几何字段而引发的HibernateSpatial框架错误。解决方法包括升级hibernate-spatial包、自定义SQL更新或设置不可变字段。
摘要由CSDN通过智能技术生成

问题:

更新数据时,

几何字段MultiPolygon类型时报错;

java.lang.IllegalStateException: Only simple geometries should be used

几何字段Point类型时不报错;

新增时字段存在MultiPolygon不报错。

查看日志可知,并没有发送sql。可知这是框架层面的报错。

日志为

 在org.hibernate.spatial.jts.JTSUtils.equals3DPrimitiveGeometries打断点可知,这方法中限定了几何类型

	private static boolean equals3DPrimitiveGeometries(Geometry g1, Geometry g2) {
		//this method assumes that g1 and g2 are of the same type
		assert ( g1.getClass().equals( g2.getClass() ) );
		if ( g1 instanceof Point ) {
			return equals3D( g1.getCoordinate(), g2.getCoordinate() );
		}

		if ( g1 instanceof LineString ) {
			return equalLineStringCoordinates( (LineString) g1, (LineString) g2 );
		}

		if ( g1 instanceof Polygon ) {
			return equalPolygonCoordinates( (Polygon) g1, (Polygon) g2 );
		}
		throw new IllegalStateException( "Only simple geometries should be used" );
	}

 调用方法栈可知这是在org.hibernate.spatial的包下的。该方法主要实现了hibernate中检测dirty数据的功能。

当前版本为

implementation group: 'org.hibernate', name: 'hibernate-spatial', version: '5.4.32.Final'
 

解决办法:1.升级hibernate-spatial包;2.或手写更新sql;3.或在字段上设置@Column(name = "location",updatable=false),字段永不更新时可用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值