| 
         此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data Neo4j 7.4.4!  | 
    
转换
基于约定的映射
Neo4j 转换器在未提供其他映射元数据时具有一些用于映射对象的约定。 约定是:
- 
短 Java 类名按以下方式映射到主标签: 类
com.bigbank.SavingsAccount映射到savingsAccount主标签。 - 
该转换器使用向其注册的任何 Spring Converter 来覆盖对象属性到节点字段和值的默认 Map。
 - 
对象的字段用于与图形中的字段相互转换。 公共
JavaBean属性。 - 
如果你有一个非零参数的构造函数,其构造函数参数名称与 node 的顶级属性名称匹配,则使用该构造函数。 否则,使用零参数构造函数。 如果有多个非零参数构造函数,则会引发异常。
 
我们支持各种开箱即用的转换。 在官方驱动程序手册中找到支持的密码类型列表:Type mapping。
同样支持包装器类型的基元类型。
| 域类型 | 密码类型 | 直接映射到本机类型 | 
|---|---|---|
  | 
布尔  | 
✔  | 
  | 
布尔值列表  | 
✔  | 
  | 
整数  | 
✔  | 
  | 
整数列表  | 
✔  | 
  | 
浮  | 
✔  | 
  | 
浮点数列表  | 
✔  | 
  | 
字符串  | 
✔  | 
  | 
字符串列表  | 
✔  | 
  | 
字节数组  | 
✔  | 
  | 
长度为 1 的 ByteArray  | 
|
  | 
长度为 1 的字符串  | 
|
  | 
长度为 1 的 String 列表  | 
|
  | 
格式为 ISO 8601 日期 (  | 
|
  | 
字符串  | 
|
  | 
字符串列表  | 
|
  | 
整数  | 
|
  | 
整数列表  | 
|
  | 
格式为 BCP 47 语言标记的字符串  | 
|
  | 
整数  | 
|
  | 
整数列表  | 
|
  | 
字符串  | 
|
  | 
字符串  | 
|
  | 
日期  | 
✔  | 
  | 
时间  | 
✔  | 
  | 
本地时间  | 
✔  | 
  | 
日期时间  | 
✔  | 
  | 
本地日期时间  | 
✔  | 
  | 
日期时间  | 
|
  | 
日期时间  | 
|
  | 
字符串  | 
|
  | 
字符串  | 
|
  | 
期间  | 
|
  | 
期间  | 
|
  | 
期间  | 
✔  | 
  | 
点  | 
✔  | 
  | 
CRS 4326 的点  | 
|
  | 
CRS 4979 的要点  | 
|
  | 
带有 CRS 7203 的尖头  | 
|
  | 
带有 CRS 9157 的尖  | 
|
  | 
CRS 为 4326 且 x/y 对应于纬度/经度的点  | 
|
的实例  | 
String (枚举的 name 值)  | 
|
的实例  | 
String 列表(枚举的 name 值)  | 
|
  | 
字符串  | 
|
  | 
字符串  | 
|
  | 
字符串  | 
自定义转化
对于给定类型的属性
如果您更喜欢在实体中使用自己的类型,或者将其作为@Queryannotated methods,您可以定义和提供自定义 converter 实现。
首先,您必须实现一个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 方案。
这些是建立在上述概念之上的元注释。