java如何使用postgis和hibernatespatial正确映射多边形类型?
假设我有下表
CREATE TABLE foo (
id BIGSERIAL PRIMARY KEY,
polygon GEOMETRY(POLYGON)
);
和实体类
@Table
@Entity
public class Foo {
@Id
@GeneratedValue(strategy = IDENTITY)
private Long id;
private Polygon polygon;
}
我设法保存了一个Foo实体,但是,我无法从数据库中选择它。我得到一个例外:
java.lang.NumberFormatException: For input string: "PO"
然后,我在多边形字段顶部添加了以下注释:
@Type(type = "org.hibernate.spatial.JTSGeometryType")
但它会抛出 另一个异常表示无法实例化此类型:
org.hibernate.MappingException: Could not instantiate Type: org.hibernate.spatial.JTSGeometryType
请注意,我使用的是5.1.0。hibernate和hibernate spatial的最终版本
多谢各位
# 1 楼答案
似乎
hibernate-spartial 5.x
知道如何以本机方式处理JTS几何类型,因此不需要类型注释。这是我的工作配置MySQL表
JPA实体
冬眠方言
请注意,我的应用程序在WildFly 10中运行,它提供了额外的运行时依赖项,如MySQL驱动程序
# 2 楼答案
您也应该尝试给出列名
您还应该知道,从Hibernate Spatial 4.0-M1开始,只有几何体类型被指定为Hibernate,因此@Column注释必须设置
columnDefinition="Geometry"
,而不是Point或其他任何内容。这可能在将来得到解决有了这本修改集,我终于可以把一个点写到数据库了!正确的属性规范是:
在hibernate中使用方言进行检查。cfg。xml
将以下行添加到休眠。cfg。xml
# 3 楼答案
我降级到HibernateSpatial 4.3版本。请参阅下面我的配置
实体列:
多边形类可以在
com.vividsolutions.jts.geom
包中找到依赖项:
存储库:
冬眠方言: