此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Data Neo4j 7.5.2! |
转换
基于约定的映射
当没有提供额外的映射元数据时,Neo4j Converter 有一些映射对象的约定。 约定是:
-
短 Java 类名按以下方式映射到主标签: 班级
com.bigbank.SavingsAccount
映射到savingsAccount
主要标签。 -
转换器使用向其注册的任何 Spring Converter 来覆盖对象属性到节点字段和值的默认映射。
-
对象的字段用于在图形中的字段之间进行转换。 公共
JavaBean
不使用属性。 -
如果有一个非零参数构造函数,其构造函数参数名称与节点的顶级属性名称匹配,则使用该构造函数。 否则,使用零参数构造函数。 如果有多个非零参数构造函数,则会抛出异常。
我们支持开箱即用的各种转换。 在官方驱动程序手册中找到支持的密码类型列表:类型映射。
同样支持包装器的原始类型。
域类型 | 密码类型 | 直接映射到原生类型 |
---|---|---|
|
布尔 |
✔ |
|
布尔值列表 |
✔ |
|
整数 |
✔ |
|
整数列表 |
✔ |
|
浮 |
✔ |
|
浮点列表 |
✔ |
|
字符串 |
✔ |
|
字符串列表 |
✔ |
|
字节阵列 |
✔ |
|
长度为 1 的 ByteArray |
|
|
长度为 1 的字符串 |
|
|
长度为 1 的字符串列表 |
|
|
格式为 ISO 8601 日期 ( |
|
|
字符串 |
|
|
字符串列表 |
|
|
整数 |
|
|
整数列表 |
|
|
格式化为 BCP 47 语言标记的字符串 |
|
|
整数 |
|
|
整数列表 |
|
|
字符串 |
|
|
字符串 |
|
|
日期 |
✔ |
|
时间 |
✔ |
|
当地时间 |
✔ |
|
日期时间 |
✔ |
|
本地日期时间 |
✔ |
|
日期时间 |
|
|
日期时间 |
|
|
字符串 |
|
|
字符串 |
|
|
期间 |
|
|
期间 |
|
|
期间 |
✔ |
|
点 |
✔ |
|
使用CRS 4326的点 |
|
|
CRS 4979 的积分 |
|
|
CRS 7203 的点 |
|
|
CRS 9157 点 |
|
|
CRS 4326 和 x/y 对应于纬度/经度的点 |
|
实例 |
String(枚举的名称值) |
|
实例 |
字符串列表(枚举的名称值) |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
自定义转化
对于给定类型的属性
如果您更喜欢在实体中使用自己的类型或作为@Query
带注释的方法,您可以定义并提供自定义转换器实现。首先,您必须实现一个GenericConverter
并注册您的转换器应该处理的类型。对于实体属性类型转换器,您需要注意将类型与 Neo4j Java 驱动程序进行转换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
构造 函数。
仅适用于特定属性
如果您只需要针对某些特定属性进行转化,我们会提供@ConvertWith
. 这是一个可以放在两个实体的属性上的注释(@Node
) 和关系属性 (@RelationshipProperties
)
它定义了一个Neo4jPersistentPropertyConverter
通过converter
属性
和可选的Neo4jPersistentPropertyConverterFactory
来构建前者。
通过实现Neo4jPersistentPropertyConverter
可以解决给定类型的所有特定转换。
另外@ConvertWith
还提供converterRef
用于在应用程序上下文中引用任何 Spring bean 实现Neo4jPersistentPropertyConverter
.引用的 bean 将优先于构建新的转换器。
我们提供@DateLong
和@DateString
作为元注释注释,以向后兼容不使用本机类型的 Neo4j-OGM 方案。
这些是建立在上述概念之上的元注释。