我咨询了很多问题,还是找不到解决我问题的办法。
我正在做一个应用程序,其中一些类具有几何图形或点类型的属性,但在做持久性测试时,一切都很顺利,直到我尝试保存一个点。
我想补充一点,我需要使用这种类型的几何图形(导入org.locationtech.jts.geom.point;)我找到的所有解决方案都是使用类型(import com.vividsolutions.jts.geom.point;)
我认为问题是当涉及到串行化器时,我有一个应该可以很好地工作,但一个函数给了我一个错误。
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<repositories>
<repository>
<id>osgeo</id>
<name>Geotools repository</name>
<url>http://download.osgeo.org/webdav/geotools</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-spatial</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.locationtech.jts</groupId>
<artifactId>jts-core</artifactId>
<version>1.16.1</version>
</dependency>
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geojson</artifactId>
<version>2.7.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.properties
## Spring DATASOURCE (DataSourceAutoConfiguration & DataSourceProperties)
spring.datasource.url=jdbc:postgresql://localhost:5432/demo
spring.datasource.username= asi
spring.datasource.password= asi
# The SQL dialect makes Hibernate generate better SQL for the chosen database
#spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
#hibernate.dialect=org.hibernate.spatial.dialect.postgis.PostgisDialect
spring.jpa.properties.hibernate.dialect=org.hibernate.spatial.dialect.postgis.PostgisDialect
#spring.jpa.properties.hibernate.dialect=org.hibernate.spatial.dialect.postgis.PostgisPG95Dialect
spring.jpa.hibernate.ddl-auto = create
spring.datasource.driverClassName=org.postgresql.Driver
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false
spring.jpa.show-sql = true
Location l = new Location();
Point p = geometryFactory.createPoint(new Coordinate(2,4));
p.setSRID(SRID);
l.setPosition(p);
daol.create(l);
import java.util.Calendar;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import org.locationtech.jts.geom.Point;
import es.udc.fic.model.util.CustomGeometryDeserializer;
import es.udc.fic.model.util.CustomGeometrySerializer;
@Entity
public class Location {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "loc_generator")
@SequenceGenerator(name = "loc_generator", sequenceName = "loc_seq")
private Long id;
private String provider;
private Calendar time;
// @JsonSerialize(using = CustomGeometrySerializer.class)
// @JsonDeserialize(using = CustomGeometryDeserializer.class)
@Column(columnDefinition = "geometry(Point,4326)")
private Point position;
这个序列化器应该可以工作,但它给了我一个提到的函数错误(类型GeometryJSON中的方法write(几何,对象)不适用于参数(几何,字符串编写器))
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import org.geotools.geojson.geom.GeometryJSON;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.locationtech.jts.geom.Geometry;
public class CustomGeometrySerializer extends JsonSerializer<Geometry> {
private static GeometryJSON gjson = new GeometryJSON(8);
public String serialize(Geometry value) {
StringWriter writer = new StringWriter();
/*
try {
gjson.write(value, writer);
} catch (IOException e) {
}*/
return writer.toString();
}
@Override
public void serialize(Geometry value, JsonGenerator gen, SerializerProvider serializers)
throws IOException, JsonProcessingException {
StringWriter writer = new StringWriter();
// gjson.write(value, writer);
gen.writeRawValue(writer.toString());
}
}
错误跟踪
最后,我还没有找到locationtech几何学的解法,可能是因为它比vividsolutions新,而使用vividsolutions时,一切都正常工作,所以我的解法是使用vividsolutions而不是locationtech。
我发现的另一个错误的事实是序列化器(它不会失败地更改到vividsolutions)与数据库无关,这是hibernate完全负责的。
我用Java: 还有IntelliJ IDEA: 编译时获取错误: 执行: 所以应该在release中使用两个连字符,而Intellij Idea应该在release中使用一个连字符。 我可以覆盖IDEA使用的选项,或者以某种方式修复它吗? UPD:甚至构建、执行和部署
问题内容: 我有一个Spring Roo + Hibernate项目,该项目需要从客户端应用程序输入JTS知名文本(WKT)字符串,然后将其转换为JTSGeometry对象,然后尝试将其写入PostGIS数据库。我在JDBC连接和类型方面遇到了一些问题,但这些问题似乎已通过以下方式解决: 转换完成: 但是现在,当Hibernate尝试将我的Geometry对象写入数据库时,我得到一个错误: 似
我有一个Spring Roo Hibernate项目,它从客户端应用程序获取JTS众所周知的文本(WKT)字符串输入,将其转换为JTS几何对象,然后尝试将其写入PostGIS数据库。我在JDBC连接和类型方面遇到了一些问题,但是这些问题似乎已经通过以下方式解决了: 转换确实: 然而,现在当Hibernate试图将我的几何对象写入数据库时,我得到一个错误: 很明显,这个错误与二进制表示有关,它可能是
问题内容: 我使用此查询创建了一个表现 在,当我尝试使用插入一些数据时,遇到此错误。 我做错了什么? 问题答案: 不是日期,而是一个字符串。 当使用session参数的值作为格式掩码将Oracle非日期文字插入到列中时,Oracle将对其进行隐式处理( 注意:这是一个session参数,属于客户端;它不是全局设置 )。如果非日期文字与该格式匹配,则它将起作用(如果不匹配,则它将不起作用)-但是,如
问题内容: 我正在尝试遍历此循环: 我在第100,000个以上的记录中收到以下错误。 这个错误是什么意思? 问题答案: 也许光标在服务器上超时了。要查看这是否是问题,请尝试将timeout = False设置为: 参见http://api.mongodb.org/python/1.6/api/pymongo/collection.html#pymongo.collection.Collection
大家好,每当我尝试在Spring调用验证器时,我都会收到以下错误 请看看并帮助我解决这个错误,以前我使用登录页面的验证,它工作正常,但现在它不工作。 这是我的代码片段。 控制器 } 验证器 JSP页面