Сохранение пространственных (точечных) свойств из Neo4j с использованием java ogm - PullRequest
0 голосов
/ 22 января 2020

У меня есть база данных neo4j, и один из узлов в базе данных имеет следующее:

<id>:91671 coordinates: point({srid:7203, x:-4.327197062, y:52.03857589}) description: "home"

Я пытаюсь создать модель этого в java - Итак:

import org.neo4j.ogm.annotation.GeneratedValue;
import org.neo4j.ogm.annotation.NodeEntity;
import org.neo4j.ogm.annotation.Property;
import org.neo4j.ogm.types.spatial.CartesianPoint2d;

@NodeEntity (label="Location")
public class Location
{
    @Id @GeneratedValue
    private Long id;

    public Long getId() 
    {
        return id;
    }  

    @Property(name="description")
    String description;

    @Property(name="coordinates")
    CartesianPoint2d coordinates; // problem is here      
}

Когда я пытаюсь использовать ogm для сопоставления узла с объектом, я получаю следующую ошибку:

org.neo4j.ogm.exception.core. InvalidPropertyFieldException: «Расположение # координаты» не является постоянным как свойство, но не было помечено как переходное.

Я пробовал различные другие типы для coordinates, а также пытался использовать конвертер (на основе документация ogm - см. 3.10.2 ); но каждый раз я получаю сообщение об ошибке.

Как правильно сделать это сопоставление между точкой neo4j srid 7203 и типом java? Почему он говорит, что он не является постоянным, и каковы мои альтернативы?

примечание: я знаю, что мои очки, вероятно, должны быть 4326, так как я говорю о широтах и ​​долготах - я не конечно, почему это не так - но давайте пока решим проблему как есть

1 Ответ

1 голос
/ 24 января 2020

Пожалуйста, убедитесь, что вы включили собственные типы в свойствах ogm как

use-native-types=true

или в конструкторе конфигурации

Configuration configuration = new Configuration.Builder()
        .uri("bolt://neo4j:password@localhost")
        .useNativeTypes()   //this enables using the spatial and temporal data 
        .build()            //  types in ogm 

и в вашем pojo используйте CartesianPoint2d / CartesianPoint3d или GeographicPoint2d / GeographicPoint3d в зависимости от на тип данных у вас в графике.

@Property(name="coordinates")
CartesianPoint2d coordinates;
...