|
该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用Spring Data Neo4j 8.0.0! |
转换
基于约定的映射
Neo4j 转换器在没有提供额外映射元数据时,有几种映射对象的约定。 这些惯例包括:
-
简短的 Java 类名通过以下方式映射到主标签: 该级别
com.bigbank.储蓄账户映射到储蓄账户主要厂牌。 -
转换器会使用注册的任意 Spring 转换器来覆盖对象属性与节点字段和值的默认映射。
-
对象的字段用于与图中的字段之间的转换。 公共
JavaBean不使用属性。 -
如果你有一个非零参数的构造器,其构造器参数名称与节点顶层属性名称一致,则使用该构造器。 否则,使用零参数构造子。 如果存在多个非零参数的构造函数,则会抛出异常。
我们支持开箱即用的各种转换方案。 在官方驱动程序手册中查找支持的密码类型列表:类型映射。
原始类型的包装类型同样得到支持。
| 领域类型 | 密码类型 | 直接映射到本地类型 |
|---|---|---|
|
布尔 |
✔ |
|
布尔值列表 |
✔ |
|
整数 |
✔ |
|
整数列表 |
✔ |
|
浮 |
✔ |
|
花车列表 |
✔ |
|
字符串 |
✔ |
|
弦列表 |
✔ |
|
字节阵列 |
✔ |
|
长度为1的字节数组 |
|
|
长度为1的弦 |
|
|
长度为1的弦列表 |
|
|
字符串格式化为 ISO 8601 日期( |
|
|
字符串 |
|
|
弦列表 |
|
|
整数 |
|
|
整数列表 |
|
|
字符串格式化为BCP 47语言标签 |
|
|
整数 |
|
|
整数列表 |
|
|
字符串 |
|
|
字符串 |
|
|
日期 |
✔ |
|
时间 |
✔ |
|
本地时间 |
✔ |
|
约会时间 |
✔ |
|
本地日期时间 |
✔ |
|
约会时间 |
|
|
约会时间 |
|
|
字符串 |
|
|
字符串 |
|
|
期间 |
|
|
期间 |
|
|
期间 |
✔ |
|
点 |
✔ |
|
与CRS 4326号点的联系 |
|
|
与CRS 4979号点 |
|
|
与CRS 7203号点 |
|
|
CRS 9157点 |
|
|
CRS 4326的点和x/y对应经纬度 |
|
实例 |
字符串(枚举的名称值) |
|
实例 |
字符串列表(枚举的名称值) |
|
|
字符串 |
|
|
字符串 |
|
|
字符串 |
自定义转换
对于给定类型的属性
如果你更喜欢在实体中使用自己的类型,或者作为参数来作@Query注释方法,你可以定义并提供自定义转换器实现。
首先你必须实现一个通用转换器并登记转换器应处理的类型。
对于实体属性类型转换器,你需要确保将类型转换到和从Neo4j Java驱动之间转换值.
如果你的转换器只应在仓库中使用自定义查询方法,只需提供单向转换即可值类型。
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知道你的转换器,必须在Neo4j转换.
为此,你必须创建一个@Bean其中类型为org.springframework.data.neo4j.core.convert.Neo4jConversions.
否则,Neo4j转换它只会在后台用内置默认转换器创建。
@Bean
public Neo4jConversions neo4jConversions() {
Set<GenericConverter> additionalConverters = Collections.singleton(new MyCustomTypeConverter());
return new Neo4jConversions(additionalConverters);
}
如果你的应用需要多个转换器,可以在Neo4j转换构造 函数。
仅限特定属性
如果您只需要针对某些特定属性进行转换,我们提供@ConvertWith.
这是一个可以加在两个实体属性上的注释(@Node)和关系性质(@RelationshipProperties)
它定义了Neo4jPersistentPropertyConverter通过转炉属性
以及一个可选Neo4jPersistentPropertyConverterFactory构建前者。
实现为Neo4jPersistentPropertyConverter所有特定类型的转换都可以被处理。
另外@ConvertWith还提供转换器 参考用于在应用上下文中引用任何 Spring Bean 实现Neo4jPersistentPropertyConverter.上述豆子将比新建转换器更受青睐。
我们提供@DateLong和@DateString作为元注释注释,用于向后兼容不使用原生类型的 Neo4j-OGM 方案。
这些是基于上述概念构建的元注释注释。