当前位置: 首页 > 知识库问答 >
问题:

org.postgresql.util.psqlexception:错误:遇到无效的endian标志值

步衡
2023-03-14

我咨询了很多问题,还是找不到解决我问题的办法。

我正在做一个应用程序,其中一些类具有几何图形或点类型的属性,但在做持久性测试时,一切都很顺利,直到我尝试保存一个点。

我想补充一点,我需要使用这种类型的几何图形(导入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());
    }
}

错误跟踪

共有1个答案

糜昌胤
2023-03-14

最后,我还没有找到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页面