基于约定的映射
Neo4j Converter 有一些约定,用于在没有提供其他映射元数据时映射对象。 约定是:
-
短 Java 类名按以下方式映射到主标签: 该类映射到主标签。
com.bigbank.SavingsAccount
savingsAccount
-
转换器使用在其注册的任何 Spring Converter 来覆盖对象属性到节点字段和值的默认映射。
-
对象的字段用于在图形中的字段之间进行转换。 不使用公共属性。
JavaBean
-
如果有一个非零参数构造函数,其构造函数参数名称与节点的顶级属性名称匹配,则使用该构造函数。 否则,将使用零参数构造函数。 如果存在多个非零参数构造函数,则会引发异常。
我们支持开箱即用的广泛转换。 在官方驱动程序手册中查找支持的密码类型列表:类型映射。
同样支持包装器类型的基元类型。
域类型 | Cypher类型 | 直接映射到本机类型 |
---|---|---|
|
布尔 |
✔ |
|
布尔值列表 |
✔ |
|
整数 |
✔ |
|
整数列表 |
✔ |
|
浮 |
✔ |
|
浮动列表 |
✔ |
|
字符串 |
✔ |
|
字符串列表 |
✔ |
|
字节数组 |
✔ |
|
长度为 1 的 ByteArray |
|
|
长度为 1 的字符串 |
|
|
长度为 1 的字符串列表 |
|
|
格式为 ISO 8601 日期 () 的字符串。
请注意:SDN 会将所有实例存储在 中。
如果需要时区,请使用支持时区的类型(即 )或将区域存储为单独的属性。 |
|
|
字符串 |
|
|
字符串列表 |
|
|
整数 |
|
|
整数列表 |
|
|
格式为 BCP 47 语言标记的字符串 |
|
|
整数 |
|
|
整数列表 |
|
|
字符串 |
|
|
字符串 |
|
|
日期 |
✔ |
|
时间 |
✔ |
|
当地时间 |
✔ |
|
日期时间 |
✔ |
|
本地日期时间 |
✔ |
|
日期时间 |
|
|
日期时间 |
|
|
字符串 |
|
|
字符串 |
|
|
期间 |
|
|
期间 |
|
|
期间 |
✔ |
|
点 |
✔ |
|
使用 CRS 4326 点 |
|
|
使用 CRS 4979 点 |
|
|
使用 CRS 7203 点 |
|
|
使用 CRS 9157 点 |
|
|
CRS 4326 和 x/y 对应纬度/经度的点 |
|
实例 |
String(枚举的名称值) |
|
实例 |
字符串列表(枚举的名称值) |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
域类型 | Cypher类型 | 直接映射到本机类型 |
---|---|---|
|
布尔 |
✔ |
|
布尔值列表 |
✔ |
|
整数 |
✔ |
|
整数列表 |
✔ |
|
浮 |
✔ |
|
浮动列表 |
✔ |
|
字符串 |
✔ |
|
字符串列表 |
✔ |
|
字节数组 |
✔ |
|
长度为 1 的 ByteArray |
|
|
长度为 1 的字符串 |
|
|
长度为 1 的字符串列表 |
|
|
格式为 ISO 8601 日期 () 的字符串。
请注意:SDN 会将所有实例存储在 中。
如果需要时区,请使用支持时区的类型(即 )或将区域存储为单独的属性。 |
|
|
字符串 |
|
|
字符串列表 |
|
|
整数 |
|
|
整数列表 |
|
|
格式为 BCP 47 语言标记的字符串 |
|
|
整数 |
|
|
整数列表 |
|
|
字符串 |
|
|
字符串 |
|
|
日期 |
✔ |
|
时间 |
✔ |
|
当地时间 |
✔ |
|
日期时间 |
✔ |
|
本地日期时间 |
✔ |
|
日期时间 |
|
|
日期时间 |
|
|
字符串 |
|
|
字符串 |
|
|
期间 |
|
|
期间 |
|
|
期间 |
✔ |
|
点 |
✔ |
|
使用 CRS 4326 点 |
|
|
使用 CRS 4979 点 |
|
|
使用 CRS 7203 点 |
|
|
使用 CRS 9157 点 |
|
|
CRS 4326 和 x/y 对应纬度/经度的点 |
|
实例 |
String(枚举的名称值) |
|
实例 |
字符串列表(枚举的名称值) |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
自定义转换
对于给定类型的属性
如果您希望在实体中使用自己的类型或作为批注方法的参数,则可以定义并提供自定义转换器实现。
首先,您必须实现并注册转换器应处理的类型。
对于实体属性类型转换器,您需要注意将类型与Neo4j Java Driver相互转换。
如果转换器应该仅与存储库中的自定义查询方法一起使用,则提供对类型的单向转换就足够了。@Query
GenericConverter
Value
Value
public class MyCustomTypeConverter implements GenericConverter {
@Override
public Set<ConvertiblePair> getConvertibleTypes() {
Set<ConvertiblePair> convertiblePairs = new HashSet<>();
convertiblePairs.add(new ConvertiblePair(MyCustomType.class, Value.class));
convertiblePairs.add(new ConvertiblePair(Value.class, MyCustomType.class));
return convertiblePairs;
}
@Override
public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
if (MyCustomType.class.isAssignableFrom(sourceType.getType())) {
// convert to Neo4j Driver Value
return convertToNeo4jValue(source);
} else {
// convert to MyCustomType
return convertToMyCustomType(source);
}
}
}
要使 SDN 知道您的转换器,必须在 .
为此,您必须创建一个类型为 的 。
否则,将仅使用内部默认转换器在后台创建。Neo4jConversions
@Bean
org.springframework.data.neo4j.core.convert.Neo4jConversions
Neo4jConversions
@Bean
public Neo4jConversions neo4jConversions() {
Set<GenericConverter> additionalConverters = Collections.singleton(new MyCustomTypeConverter());
return new Neo4jConversions(additionalConverters);
}
如果应用程序中需要多个转换器,则可以在构造函数中根据需要添加任意数量的转换器。Neo4jConversions
仅适用于特定属性
如果您只需要针对某些特定属性进行转化,我们提供 .
这是一个注释,可以放在实体 () 和关系属性 () 的属性上
它定义了一个 via 属性
以及构建前者的可选选项。
通过实现给定类型的所有特定转换,可以解决。
此外,还提供了在应用程序上下文中引用任何 Spring Bean 实现 。引用的 Bean 将优先于构造新的转换器。@ConvertWith
@Node
@RelationshipProperties
Neo4jPersistentPropertyConverter
converter
Neo4jPersistentPropertyConverterFactory
Neo4jPersistentPropertyConverter
@ConvertWith
converterRef
Neo4jPersistentPropertyConverter
我们提供 和 作为元注释的注释,以便向后兼容不使用本机类型的 Neo4j-OGM 方案。
这些是建立在上述概念基础上的元注释注释。@DateLong
@DateString
复合材料特性
对于 ,或类型的属性可以存储为复合属性。
映射中的所有条目都将作为属性添加到包含该属性的节点或关系中。
使用配置的前缀或以属性名称为前缀。
虽然我们只为开箱即用的地图提供该功能,但您可以对其进行配置
作为要使用的转换器。A 需要知道给定类型如何
分解为地图并从地图中组合回来。@CompositeProperty
Map<String, Object>
Map<? extends Enum, Object>
Neo4jPersistentPropertyToMapConverter
@CompositeProperty
Neo4jPersistentPropertyToMapConverter