Neo4j OGM Невозможно обработать поле ZonedDateTime в классе my.class.Class. Проверьте отображение - PullRequest
3 голосов
/ 24 октября 2019

Я пытаюсь сохранить @NodeEntity с полем типа java.time.ZonedDateTime в моей базе данных Neo4j, используя драйвер Bolt, но все, что я получаю, это предупреждение:

org.neo4j.ogm.context.EntityGraphMapper: Невозможно обработать AT для класса nz.co.class.project.point.Point. Проверьте соответствие.

Я использую следующие библиотеки:

  • OpenJDK 11
  • Spring Boot (2.2.0.RELEASE)
  • Spring Data Neo4j (5.2.0.RELEASE)
  • Neo4j (3.5.12)
  • Neo4j-OGM (3.2.1)
  • Neo4j-OGM-Bolt-Драйвер (3.2.1)
  • Neo4j-OG-Bolt-Native-Types (3.2.1)

В результате объект узла сохраняется в базе данных Neo4j, но безАтрибут ZonedDateTime.

Я что-то не так делаю? Насколько я понимаю, версия OGM 3.2.X поддерживает все даты Java в пакете "java.time".

Вот рабочий пример проблемы:

https://github.com/lcichero/neo4j-ogm-zoneddatetime.git

1 Ответ

1 голос
/ 24 октября 2019

Редактировать : Предыдущий ответ был неверным, извините за это. Я снова заглянул в наши источники, потому что ваш комментарий вызвал у меня некоторые сомнения.

Вам необходимо явно включить преобразование типов (это будет рассмотрено в документации). Для приложения Spring Boot вы можете сделать это в application.properties, добавив

spring.data.neo4j.use-native-types=true

И вы увидите что-то вроде

Request: UNWIND {rows} as row CREATE (n:`Point`) SET n=row.props RETURN row.nodeRef as ref, ID(n) as id, {type} as type with params {type=node, rows=[{nodeRef=-2, props={x=14.5, y=43.5, at=2018-06-23T00:00+12:00}}]}

, если вы установите логирование для org.neo4j.ogm до DEBUG .

Для Neo4j-OGM конфигурация будет

Configuration configuration = new Configuration.Builder()
    .uri("bolt://neo4j:password@localhost")
    .useNativeTypes()
    .build()

, как описано в документации .

Почему вы должны явно включить это? Потому что мы не уничтожим и не сможем читать данные пользователей до Neo4j-OGM 3.2 в базе данных, сохраняя «новые» собственные типы вместо преобразованных значений.

Старый ответ

Мы еще не опубликовали 3.2. документацию, поэтому я ссылаюсь на источники на GitHub .

Поддерживаемые временные типы: Date, Time, LocalTime, DateTime, LocalDateTime и Duration но, как вы можете видеть, не ZonedDateTime.

...