2016-12-05 65 views
2

我正在使用主題中所述的框架。Hibernate-Spatial,JPA,Spring,MySQL 5.7(無法檢索點)

這是我的我的application.yml 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 

我不知道這是否是觸發SpatialDialect爲MySQL5.7

我的實體法的正確方法對於點

@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(類型= 「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] 

回答

0

您可以使用com.vividsolutions.jts.geom.Point類,然後你不需要明確spcify的@Type。

看看Hibernate User Guide上的這個例子。

+0

我正在使用AREADY'com.vividsolutions.jts.geom.Point' – Roland

+0

那麼就應該沒有指定工作一種。看看[GitHub上的這個測試](https://github.com/hibernate/hibernate-orm/blob/master/documentation/src/test/java/org/hibernate/userguide/spatial/SpatialTest.java)。 –

0

實際的解決方法是刪除@Type和使用@Column(name = "location", nullable = false, columnDefinition = "Point")

注意,這是MySQL