我正在尝试迁移到 Spring Boot 3(和 hibernate-spatial:6.4.1.Final) 因此,在迁移之前,我的 @Entity 中有以下几行描述存储 MultiLineString 几何图形的表中的列:
@Column(name = "multilinestring")
@Type(value = "org.locationtech.jts.geom.MultiLineString")
private MultiLineString multiLineString;
天真地,我将@Type转换为
@Type(org.locationtech.jts.geom.MultiLineString.class)
,但这会产生错误,因为MultiLineString不扩展UserType(不兼容的类型:类无法转换为Class>)
那么在这种情况下我应该使用哪个类?还是我做错了什么?
摘自我的 gradle 文件,以防万一这很重要:
plugins {
id 'org.springframework.boot' version '3.2.1'
id 'io.spring.dependency-management' version '1.1.4'
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-rest'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-mail'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.hibernate.orm:hibernate-spatial:6.4.1.Final'
implementation 'net.postgis:postgis-jdbc:2023.1.0'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'
....
}
好吧,答案出乎意料地简单: 只需删除@Type注释即可:
@Column(name = "multilinestring")
private MultiLineString multiLineString;
升级到 hibernate 6 后(并确保在 build.gradle 文件中包含
implementation 'org.hibernate.orm:hibernate-spatial'
),JPA 会自动正确识别 MultiLineString,因此不再需要 @Type 注释。