2016-12-26 2 views
0

J'ai une entité Location qui a une propriété de type org.springframework.data.elasticsearch.core.geo.GeoPoint dans Spring boot et spring-data projet -elasticsearch comme ci-dessous:Causée par: org.hibernate.MappingException: Impossible de déterminer le type de: org.springframework.data.elasticsearch.core.geo.GeoPoint

@Entity 
@Table(name = "location") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
@Document(indexName = "location") 
public class Location implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @NotNull 
    @Column(name = "name", nullable = false) 
    private String name; 

    @NotNull 
    @Column(name = "country", nullable = false) 
    private String country; 

    @GeoPointField 
    private GeoPoint location; 
... 

Mais en veille prolongée jette Caused by: org.hibernate.MappingException: Could not determine type for: org.springframework.data.elasticsearch.core.geo.GeoPoint quand je commence l'application. Un moyen de contourner cela?

Répondre

0

J'ai utilisé la représentation String des coordonnées sous la forme "12.14, 34.53" (plus here) avec @GeoPointField et qui a travaillé.

@GeoPointField 
private String location; 
0

Vous pouvez avoir votre propre classe Location avec deux champs et l'utiliser

public class Location { 
    private double lat; 
    private double lon; 

    public double getLat() { 
     return lat; 
    } 
    public void setLat(double lat) { 
     this.lat = lat; 
    } 
    public double getLon() { 
     return lon; 
    } 
    public void setLon(double lon) { 
     this.lon = lon; 
    } 
} 

et dans votre classe de document que vous pouvez utiliser comme celui-ci

@GeoPointField 
    private Location lastLocation;