转换

基于约定的映射

Neo4j 转换器在未提供额外映射元数据时,具有一系列用于映射对象的约定。这些约定包括:spring-doc.cadn.net.cn

我们开箱即用地支持广泛的转换。
在官方驱动程序手册中查找支持的加密类型列表:类型映射spring-doc.cadn.net.cn

原始类型和包装类型均得到同等支持。spring-doc.cadn.net.cn

域名类型 Cypher type 映射到原生类型

java.lang.Booleanspring-doc.cadn.net.cn

布尔值spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

boolean[]spring-doc.cadn.net.cn

布尔值列表spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

java.lang.Longspring-doc.cadn.net.cn

整数spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

long[]spring-doc.cadn.net.cn

List of Integerspring-doc.cadn.net.cn

spring-doc.cadn.net.cn

java.lang.Doublespring-doc.cadn.net.cn

浮动spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

double[]spring-doc.cadn.net.cn

浮点数列表spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

java.lang.Stringspring-doc.cadn.net.cn

字符串spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

java.lang.String[]spring-doc.cadn.net.cn

字符串列表spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

byte[]spring-doc.cadn.net.cn

字节数组spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

java.lang.Bytespring-doc.cadn.net.cn

带有长度为 1 的字节数组spring-doc.cadn.net.cn

java.lang.Characterspring-doc.cadn.net.cn

String with length 1spring-doc.cadn.net.cn

char[]spring-doc.cadn.net.cn

List of String with length 1spring-doc.cadn.net.cn

java.util.Datespring-doc.cadn.net.cn

格式化为ISO 8601日期(yyyy-MM-dd’T’HH:mm:ss.SSSZ)。spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

请注意Z:SDN将在java.util.Date中存储所有UTC实例。spring-doc.cadn.net.cn

如果您需要时区,请使用支持它的类型(如ZoneDateTime)或单独存储时区。spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

java.lang.Floatspring-doc.cadn.net.cn

字符串spring-doc.cadn.net.cn

float[]spring-doc.cadn.net.cn

字符串列表spring-doc.cadn.net.cn

java.lang.Integerspring-doc.cadn.net.cn

整数spring-doc.cadn.net.cn

int[]spring-doc.cadn.net.cn

List of Integerspring-doc.cadn.net.cn

java.util.Localespring-doc.cadn.net.cn

字符串按 BCP 47 语言标签格式化spring-doc.cadn.net.cn

java.lang.Shortspring-doc.cadn.net.cn

整数spring-doc.cadn.net.cn

short[]spring-doc.cadn.net.cn

List of Integerspring-doc.cadn.net.cn

java.math.BigDecimalspring-doc.cadn.net.cn

字符串spring-doc.cadn.net.cn

java.math.BigIntegerspring-doc.cadn.net.cn

字符串spring-doc.cadn.net.cn

java.time.LocalDatespring-doc.cadn.net.cn

日期spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

java.time.OffsetTimespring-doc.cadn.net.cn

时间spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

java.time.LocalTimespring-doc.cadn.net.cn

本地时间spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

java.time.ZonedDateTimespring-doc.cadn.net.cn

日期时间spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

java.time.LocalDateTimespring-doc.cadn.net.cn

localDateTimespring-doc.cadn.net.cn

spring-doc.cadn.net.cn

java.time.OffsetDateTimespring-doc.cadn.net.cn

日期时间spring-doc.cadn.net.cn

java.time.Instantspring-doc.cadn.net.cn

日期时间spring-doc.cadn.net.cn

java.util.TimeZonespring-doc.cadn.net.cn

字符串spring-doc.cadn.net.cn

java.time.ZoneIdspring-doc.cadn.net.cn

字符串spring-doc.cadn.net.cn

java.time.Periodspring-doc.cadn.net.cn

持续时间spring-doc.cadn.net.cn

java.time.Durationspring-doc.cadn.net.cn

持续时间spring-doc.cadn.net.cn

org.neo4j.driver.types.IsoDurationspring-doc.cadn.net.cn

持续时间spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

org.neo4j.driver.types.Pointspring-doc.cadn.net.cn

spring-doc.cadn.net.cn

spring-doc.cadn.net.cn

org.springframework.data.neo4j.types.GeographicPoint2dspring-doc.cadn.net.cn

点(经 CRS 4326)spring-doc.cadn.net.cn

org.springframework.data.neo4j.types.GeographicPoint3dspring-doc.cadn.net.cn

带 CRS 4979 的点spring-doc.cadn.net.cn

org.springframework.data.neo4j.types.CartesianPoint2dspring-doc.cadn.net.cn

点带有 CRS 7203spring-doc.cadn.net.cn

org.springframework.data.neo4j.types.CartesianPoint3dspring-doc.cadn.net.cn

点(经CRS 9157)spring-doc.cadn.net.cn

org.springframework.data.geo.Pointspring-doc.cadn.net.cn

具有 CRS 4326 和与 lat/long 对应的 x/y 的点spring-doc.cadn.net.cn

org.springframework.data.domain.Vectorspring-doc.cadn.net.cn

persisted through setNodeVectorPropertyspring-doc.cadn.net.cn

Spring框架实例 spring-doc.cadn.net.cn

在Spring框架中,实例化的对象可以使用以下方法:spring-doc.cadn.net.cn

  • 通过@Autowired注解自动装配依赖项。
  • 使用ApplicationContext获取bean实例。
  • 通过@Bean注解注册bean到ApplicationContext。

以下是使用Spring框架的一些常见场景:spring-doc.cadn.net.cn

  1. 在服务层注入Repository层的对象。
  2. 配置多个环境的属性源。
  3. 使用拦截器实现AOP功能。

spring-doc.cadn.net.cn

String(枚举的name值)<br/>spring-doc.cadn.net.cn

Spring框架实例 spring-doc.cadn.net.cn

在Spring框架中,实例化的对象可以使用以下方法:spring-doc.cadn.net.cn

  • 通过@Autowired注解自动装配依赖项。
  • 使用ApplicationContext获取bean实例。
  • 通过@Bean注解注册bean到ApplicationContext。

以下是使用Spring框架的一些常见场景:spring-doc.cadn.net.cn

  1. 在服务层注入Repository层的对象。
  2. 配置多个环境的属性源。
  3. 使用拦截器实现AOP功能。

spring-doc.cadn.net.cn

字符串列表(枚举的名称值)spring-doc.cadn.net.cn

java.net.URLspring-doc.cadn.net.cn

字符串spring-doc.cadn.net.cn

java.net.URIspring-doc.cadn.net.cn

字符串spring-doc.cadn.net.cn

java.util.UUIDspring-doc.cadn.net.cn

字符串spring-doc.cadn.net.cn

向量类型

Spring Data 使用其自身的类型表示向量 org.springframework.data.domain.Vector
虽然可以将其用作 floatdouble 数组的包装器,但目前 Spring Data Neo4j 只支持 double 变体。
从用户的角度来看,在属性定义上仅可能定义 Vector 接口,并使用 doublefloat
Neo4j 将存储 doublefloat 变体作为 64 位 Cypher FLOAT 值,这与通过 Cypher 和专门用于持久化属性的 setNodeVectorProperty 函数保存的值一致。spring-doc.cadn.net.cn

Spring Data Neo4j 在实体定义中仅允许存在一个 Vector 属性。
请注意,由于浮点数的特性,持久化的 float 值与读取回来的值是不同的。

自定义转换

对于给定类型的属性

如果您希望在实体中使用自己的类型或作为@Query注解方法的参数,您可以定义并提供自定义转换器实现。首先您必须实现一个GenericConverter并将您的转换器应该处理的类型注册。对于实体属性类型的转换器,需要注意将您的类型转换为从Neo4j Java驱动程序Value。如果您的转换器仅用于存储库中的自定义查询方法,则只需提供到Value类型的单向转换即可。spring-doc.cadn.net.cn

自定义转换器实现示例
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中。为此,您必须创建一个类型为org.springframework.data.neo4j.core.convert.Neo4jConversions@Bean。否则,在后台只会使用内部默认转换器来创建Neo4jConversionsspring-doc.cadn.net.cn

自定义转换器实现示例
@Bean
public Neo4jConversions neo4jConversions() {
	Set<GenericConverter> additionalConverters = Collections.singleton(new MyCustomTypeConverter());
	return new Neo4jConversions(additionalConverters);
}

如果您的应用程序需要多个转换器,可以在Neo4jConversions构造函数中添加所需数量的转换器。spring-doc.cadn.net.cn

仅特定属性

如果您只需要某些特定属性的转换,我们提供了 @ConvertWith
这是一个可以放在实体(@Node)和关系属性(@RelationshipProperties)上的注解。
它通过 converter 属性定义了一个 Neo4jPersistentPropertyConverter,并且可选地提供一个 Neo4jPersistentPropertyConverterFactory 来构造前者。
通过实现 Neo4jPersistentPropertyConverter,可以解决给定类型的特定转换问题。
此外,@ConvertWith 还提供 converterRef 来引用应用程序上下文中任何实现了 Neo4jPersistentPropertyConverter 的 Spring Bean。被引用的 Bean 将优先于构建新的转换器。
spring-doc.cadn.net.cn

我们提供 @DateLong@DateString 作为元注解注释,以向后兼容不使用原生类型的 Neo4j-OGM 方案。 这些是基于上述概念构建的元注解注释。spring-doc.cadn.net.cn

组合属性

使用@CompositeProperty,类型为Map<String, Object>Map<? extends Enum, Object>的属性可以作为复合属性存储。
映射中的所有条目都将添加到包含该属性的节点或关系中。
要么带有配置前缀,要么以属性名称作为前缀。
虽然我们默认只提供对映射的支持,但您可以Neo4jPersistentPropertyToMapConverter并将其配置为在@CompositeProperty上使用的转换器。
一个Neo4jPersistentPropertyToMapConverter需要知道如何将给定类型分解并重新组合回映射。spring-doc.cadn.net.cn