Вызвано: org.зимовать.MappingException: не удалось определить тип для: org.springframe.данные.elasticsearch.ядро.Гео.Геопоинт

У меня есть Locationсущность, которая имеет свойство типа org.springframework.data.elasticsearch.core.geo.GeoPointв Spring boot и spring-data-elasticsearch project, как показано ниже:

@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;
...

Но hibernate бросаетCaused by: org.hibernate.MappingException: Could not determine type for: org.springframework.data.elasticsearch.core.geo.GeoPoint, когда я запускаю приложение. Есть способ обойти это?

2 ответа

  1. Я использовал Stringпредставление координат в виде "12.14, 34.53"(подробнее здесь ) с @GeoPointFieldаннотацией, и это сработало.

    @GeoPointField
    private String location;
    
  2. Вы можете иметь свой собственный класс местоположения с двумя полями и использовать его

    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;
        }
    }
    

    и в вашем классе документов вы можете использовать вот так

        @GeoPointField
        private Location lastLocation;