«Обнаружено неверное значение флага с порядком байтов» для географической широты и долготы [дубликат]JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 «Обнаружено неверное значение флага с порядком байтов» для географической широты и долготы [дубликат]

Сообщение Anonymous »

Я пытаюсь создать сервис географии (не геометрии) с помощью Postgis. Я хочу использовать широту и долготу для определения местоположения городов. Я пробовал различные комбинации библиотек, но не смог заставить их работать. Это было самое близкое к тому, что я подошел, пока не получил эту ошибку с порядком байтов. Какие библиотеки мне нужно использовать?
Вот технологии, которые я использую
Postgis DB 16.2
Java 17
flywayV5__add_location_to_city.sql

ALTER TABLE city ADD location geography(point);


City.java
package com.mm.geoapp.model.db.geo;

import com.mm.geoapp.model.db.BaseModel;
import jakarta.persistence.*;
// import org.geolatte.geom.Point;
// import org.hibernate.spatial.dialect.postgis.PGGeometryJdbcType;
// import org.springframework.data.geo.Point;
// import org.locationtech.jts.geom.Point;

// import net.postgis.jdbc.geometry.Point;
// import org.locationtech.jts.geom.Point;
import net.postgis.jdbc.PGgeometry;

@Entity
@Table(name = "city")
public class City extends BaseModel {
@Id
private Long id;

@Column(name = "name")
private String name;

//@Column(name = "location", nullable = true, columnDefinition = "geography(Point,4326)")
@Column(name = "location", nullable = true)
private PGgeometry location;

@ManyToOne
@JoinColumn(name = "state_region_id")
private StateRegion stateRegion;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public PGgeometry getLocation() {
return location;
}

public void setLocation(PGgeometry location) {
this.location = location;
}

public StateRegion getStateRegion() {
return stateRegion;
}

public void setStateRegion(StateRegion stateRegion) {
this.stateRegion = stateRegion;
}
}


CityService.java
package com.mm.geoapp.service;

import com.mm.geoapp.model.db.geo.City;
import com.mm.geoapp.model.db.geo.StateRegion;
import com.mm.geoapp.repository.CityRepository;
import net.postgis.jdbc.PGgeometry;
import net.postgis.jdbc.geometry.Point;
// import org.locationtech.jts.geom.Point;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class CityService {
private final CityRepository cityRepository;

@Autowired
public CityService(CityRepository cityRepository) {
this.cityRepository = cityRepository;
}

public City saveCityWithLocation(City city, Double latitude, Double longitude) {
Point point = new Point(latitude, longitude);
PGgeometry location = new PGgeometry(point);
city.setLocation(location);
return cityRepository.save(city);
}
}


pom.xml


xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0

org.springframework.boot
spring-boot-starter-parent
3.2.5


com.mm
geoapp
0.0.1-SNAPSHOT
geoapp
New MM

17



org.springframework.boot
spring-boot-starter-data-jpa


org.springframework.boot
spring-boot-starter-thymeleaf


org.flywaydb
flyway-core



org.springframework.boot
spring-boot-docker-compose
runtime
true


org.postgresql
postgresql
runtime



net.postgis
postgis-jdbc
2023.1.0


org.projectlombok
lombok
true


org.springframework.boot
spring-boot-starter-test
test


org.springframework.boot
spring-boot-testcontainers
test


org.testcontainers
junit-jupiter
test


org.testcontainers
postgresql
test






org.springframework.boot
spring-boot-maven-plugin



org.projectlombok
lombok










application.properties
spring.application.name=geoapp

spring.datasource.url=jdbc:postgresql://localhost:8008/postgis
spring.datasource.username=*****
spring.datasource.password=*****
spring.datasource.driver-class-name=org.postgresql.Driver

spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none

Ошибка
Hibernate: update city set location=?,name=?,state_region_id=? where id=?
2024-04-27T11:41:59.423-07:00 WARN 7664 --- [geoapp] [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: XX000
2024-04-27T11:41:59.423-07:00 ERROR 7664 --- [geoapp] [ main] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: Invalid endian flag value encountered.
2024-04-27T11:41:59.432-07:00 INFO 7664 --- [geoapp] [ionShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2024-04-27T11:41:59.433-07:00 INFO 7664 --- [geoapp] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
Exception in thread "main" org.springframework.orm.jpa.JpaSystemException: could not execute statement [ERROR: Invalid endian flag value encountered.] [update city set location=?,name=?,state_region_id=? where id=?]
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:341)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:241)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:566)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:794)
at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:757)
at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:676)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:426)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:164)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:184)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:223)
at jdk.proxy2/jdk.proxy2.$Proxy104.save(Unknown Source)
at com.mm.geoapp.service.CityService.saveCityWithLocation(CityService.java:44)
at com.mm.geoapp.GeoappApplication.main(GeoappApplication.java:103)
Caused by: org.hibernate.exception.GenericJDBCException: could not execute statement [ERROR: Invalid endian flag value encountered.] [update city set location=?,name=?,state_region_id=? where id=?]
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:63)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:108)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:197)
at org.hibernate.engine.jdbc.mutation.internal.AbstractMutationExecutor.performNonBatchedMutation(AbstractMutationExecutor.java:108)
at org.hibernate.engine.jdbc.mutation.internal.MutationExecutorSingleNonBatched.performNonBatchedOperations(MutationExecutorSingleNonBatched.java:40)
at org.hibernate.engine.jdbc.mutation.internal.AbstractMutationExecutor.execute(AbstractMutationExecutor.java:52)
at org.hibernate.persister.entity.mutation.UpdateCoordinatorStandard.doStaticUpdate(UpdateCoordinatorStandard.java:778)
at org.hibernate.persister.entity.mutation.UpdateCoordinatorStandard.performUpdate(UpdateCoordinatorStandard.java:324)
at org.hibernate.persister.entity.mutation.UpdateCoordinatorStandard.coordinateUpdate(UpdateCoordinatorStandard.java:242)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2810)
at org.hibernate.action.internal.EntityUpdateAction.execute(EntityUpdateAction.java:168)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:632)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:499)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:363)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:41)
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:127)
at org.hibernate.internal.SessionImpl.doFlush(SessionImpl.java:1403)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:484)
at org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:2319)
at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:1976)
at org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.beforeTransactionCompletion(JdbcCoordinatorImpl.java:439)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(JdbcResourceLocalTransactionCoordinatorImpl.java:169)
at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(JdbcResourceLocalTransactionCoordinatorImpl.java:267)
at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:101)
at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:562)
... 16 more
Caused by: org.postgresql.util.PSQLException: ERROR: Invalid endian flag value encountered.
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2713)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2401)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:368)
at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:498)
at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:415)
at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:190)
at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:152)
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:194)
... 38 more


Подробнее здесь: https://stackoverflow.com/questions/783 ... -longitude
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»