Java Hibernate Spatial、JPA、Spring、MySQL 5.7(无法检索点)

Java Hibernate Spatial、JPA、Spring、MySQL 5.7(无法检索点),java,mysql,spring,hibernate,jpa,Java,Mysql,Spring,Hibernate,Jpa,我正在使用主题中所述的框架 这是我在application.yml for spring中jpa属性的一部分 jpa: database: mysql hibernate: naming: physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl properties: hibernate: dialect: org.hibern

我正在使用主题中所述的框架

这是我在application.yml for spring中jpa属性的一部分

jpa:
  database: mysql
  hibernate:
    naming:
      physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl 
  properties:
    hibernate:
      dialect: org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect
      globally_quoted_identifiers: true
  show-sql: true
我不确定这是否是为MySQL5.7触发SpatialDialect的正确方法

点的实体方法

@Type(type = "com.iheartcity.apiapp.geometry.MySQLGeometryType")
@Column(name = "location", nullable = false)
public Point getLocation() {
    return this.location;
}
public void setLocation(Point location) {
    this.location = location;
}
我创建了一个类MySQLGeometryType.java:

package com.iheartcity.apiapp.geometry;

import org.hibernate.spatial.JTSGeometryType;
import org.hibernate.spatial.dialect.mysql.MySQLGeometryTypeDescriptor;

public class MySQLGeometryType extends JTSGeometryType {

    public MySQLGeometryType() {
        super(MySQLGeometryTypeDescriptor.INSTANCE);
    }
}
使用@Type(Type=“com.iheartcity.apiapp.geometry.MySQLGeometryType”)

它工作得很好。然而,当我对它进行注释时,我开始在运行代码检索数据时出错

例外情况如下:

java.io.StreamCorruptedException: invalid stream header: 00000000
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:808) ~[na:1.8.0_111]
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:301) ~[na:1.8.0_111]
at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:309) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:299) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:218) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:287) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:139) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:114) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:28) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:60) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:258) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:254) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:244) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:327) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2775) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1741) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1667) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.loader.Loader.getRow(Loader.java:1556) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:740) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.loader.Loader.processResultSet(Loader.java:985) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.loader.Loader.doQuery(Loader.java:943) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:349) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.loader.Loader.doList(Loader.java:2615) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.loader.Loader.doList(Loader.java:2598) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2430) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.loader.Loader.list(Loader.java:2425) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:502) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:371) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1458) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1426) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1398) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
at org.hibernate.Query.getResultList(Query.java:417) ~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:808) ~[na:1.8.0_111]
java.io.StreamCorruptedException:无效的流头:00000000
在java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:808)~[na:1.8.0_111]
在java.io.ObjectInputStream.(ObjectInputStream.java:301)~[na:1.8.0_111]
在org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.(SerializationHelper.java:309)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.(SerializationHelper.java:299)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:218)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:287)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.type.descriptor.java.SerializableTypeScriptor.fromBytes(SerializableTypeScriptor.java:139)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.type.descriptor.java.SerializableTypeScriptor.wrap(SerializableTypeScriptor.java:114)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.type.descriptor.java.SerializableTypeScriptor.wrap(SerializableTypeScriptor.java:28)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:60)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:258)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:254)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:244)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:327)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.persister.entity.AbstractEntityPersister.hydration(AbstractEntityPersister.java:2775)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.loader.loader.loadFromResultSet(loader.java:1741)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.loader.loader.InstanceNodeLoaded(loader.java:1667)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.loader.loader.getRow(loader.java:1556)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.loader.loader.getRowFromResultSet(loader.java:740)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.loader.loader.processResultSet(loader.java:985)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.loader.loader.doQuery(loader.java:943)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.loader.loader.doQueryAndInitializeNonLazyCollections(loader.java:349)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.loader.loader.doList(loader.java:2615)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.loader.loader.doList(loader.java:2598)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.loader.loader.listIgnoreQueryCache(loader.java:2430)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.loader.loader.list(loader.java:2425)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:502)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:371)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.internal.SessionImpl.list(SessionImpl.java:1458)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1426)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1398)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]
在org.hibernate.Query.getResultList(Query.java:417)~[hibernate-core-5.2.2.Final.jar:5.2.2.Final]在java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:808)~[na:1.8.0\u 111]

您可以使用
com.livitsolutions.jts.geom.Point
类,然后不需要显式指定@Type


在上查看此示例。

实际解决方案是删除
@Type
并使用
@Column(name=“location”,nullable=false,columnDefinition=“Point”)


请注意,这是针对MySQL的,将正确的方言添加到应用程序中。properties为我修复了此错误:

spring.jpa.properties.hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect

那么它应该在不指定类型的情况下工作。看看。@Vlad,高度重视你在这个论坛上的意见。但请务必在Hibernate 5中登记。如果我们不提供columnDefinition=“POINT”,它根本不会创建POINT类型的mysql字段。与Geometry类似的情况在我的案例中,我必须将Hibernate Spatial(
'org.Hibernate:Hibernate Spatial:5.0.12.Final'
)添加到我的项目中,然后在Java JPA实体中,将
字段的类型设置为
com.livitalSolutions.jts.geom.P