Neo4j OGM 无法处理 class my.class.Class 上的 ZonedDateTime 字段。检查映射
Neo4j OGM Unable to process ZonedDateTime field on class my.class.Class. Check the mapping
我正在尝试使用 Bolt 驱动程序将具有类型 java.time.ZonedDateTime 字段的 @NodeEntity 保存到我的 Neo4j 数据库中,但我得到的只是这条警告消息:
org.neo4j.ogm.context.EntityGraphMapper : Unable to process AT on class nz.co.class.project.point.Point. Check the mapping.
我正在使用以下库:
- OpenJDK 11
- Spring 引导 (2.2.0.RELEASE)
- Spring 数据 Neo4j (5.2.0.RELEASE)
- Neo4j (3.5.12)
- Neo4j-OGM (3.2.1)
- Neo4j-OGM-螺栓起子 (3.2.1)
- Neo4j-OG-Bolt-Native-Types (3.2.1)
结果是节点实体被保存在 Neo4j 数据库中,但没有 ZonedDateTime 属性。
我是不是做错了什么?据我了解,OGM 版本 3.2.X 支持 "java.time" 包中的所有 java 日期。
这是该问题的一个工作示例:
编辑:
之前的回答不对,请见谅。
我再次查看了我们的消息来源,因为你的评论让我有些疑惑。
您需要显式启用类型转换(这将在文档中介绍)。
对于 Spring 引导应用程序,您可以在 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()
如documentation所述。
为什么必须明确启用它?因为我们不会破坏并能够通过存储“新”本机类型而不是转换后的值来读取 Neo4j-OGM 3.2 之前用户在数据库中的数据。
旧答案
We haven't yet published the 3.2. documentation, so I link to the sources on GitHub.
The supported temporal types are Date
, Time
, LocalTime
, DateTime
, LocalDateTime
and Duration
but as you can see not ZonedDateTime
.
我正在尝试使用 Bolt 驱动程序将具有类型 java.time.ZonedDateTime 字段的 @NodeEntity 保存到我的 Neo4j 数据库中,但我得到的只是这条警告消息:
org.neo4j.ogm.context.EntityGraphMapper : Unable to process AT on class nz.co.class.project.point.Point. Check the mapping.
我正在使用以下库:
- OpenJDK 11
- Spring 引导 (2.2.0.RELEASE)
- Spring 数据 Neo4j (5.2.0.RELEASE)
- Neo4j (3.5.12)
- Neo4j-OGM (3.2.1)
- Neo4j-OGM-螺栓起子 (3.2.1)
- Neo4j-OG-Bolt-Native-Types (3.2.1)
结果是节点实体被保存在 Neo4j 数据库中,但没有 ZonedDateTime 属性。
我是不是做错了什么?据我了解,OGM 版本 3.2.X 支持 "java.time" 包中的所有 java 日期。
这是该问题的一个工作示例:
编辑: 之前的回答不对,请见谅。 我再次查看了我们的消息来源,因为你的评论让我有些疑惑。
您需要显式启用类型转换(这将在文档中介绍)。
对于 Spring 引导应用程序,您可以在 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()
如documentation所述。
为什么必须明确启用它?因为我们不会破坏并能够通过存储“新”本机类型而不是转换后的值来读取 Neo4j-OGM 3.2 之前用户在数据库中的数据。
旧答案
We haven't yet published the 3.2. documentation, so I link to the sources on GitHub.
The supported temporal types are
Date
,Time
,LocalTime
,DateTime
,LocalDateTime
andDuration
but as you can see notZonedDateTime
.