此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Data Neo4j 7.5.2spring-doc.cadn.net.cn

转换

基于约定的映射

当没有提供额外的映射元数据时,Neo4j Converter 有一些映射对象的约定。 约定是:spring-doc.cadn.net.cn

  • 短 Java 类名按以下方式映射到主标签: 班级com.bigbank.SavingsAccount映射到savingsAccount主要标签。spring-doc.cadn.net.cn

  • 转换器使用向其注册的任何 Spring Converter 来覆盖对象属性到节点字段和值的默认映射。spring-doc.cadn.net.cn

  • 对象的字段用于在图形中的字段之间进行转换。 公共JavaBean不使用属性。spring-doc.cadn.net.cn

  • 如果有一个非零参数构造函数,其构造函数参数名称与节点的顶级属性名称匹配,则使用该构造函数。 否则,使用零参数构造函数。 如果有多个非零参数构造函数,则会抛出异常。spring-doc.cadn.net.cn

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

同样支持包装器的原始类型。spring-doc.cadn.net.cn

域类型 密码类型 直接映射到原生类型

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

整数列表spring-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 的 ByteArrayspring-doc.cadn.net.cn

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

长度为 1 的字符串spring-doc.cadn.net.cn

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

长度为 1 的字符串列表spring-doc.cadn.net.cn

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

格式为 ISO 8601 日期 (yyyy-MM-dd’T’HH:mm:ss.SSSZ). 请注意Z:SDN 将存储所有java.util.Date实例中的实例UTC. 如果您需要时区,请使用支持它的类型(即ZoneDateTime)或将区域存储为单独的属性。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

整数列表spring-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

整数列表spring-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

本地日期时间spring-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 7203 的点spring-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 和 x/y 对应于纬度/经度的点spring-doc.cadn.net.cn

实例Enumspring-doc.cadn.net.cn

String(枚举的名称值)spring-doc.cadn.net.cn

实例Enum[]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

自定义转化

对于给定类型的属性

如果您更喜欢在实体中使用自己的类型或作为@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. 为此,您必须创建一个@Bean与类型org.springframework.data.neo4j.core.convert.Neo4jConversions. 否则,Neo4jConversions将仅在后台使用内部默认转换器创建。spring-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) 它定义了一个Neo4jPersistentPropertyConverter通过converter属性 和可选的Neo4jPersistentPropertyConverterFactory来构建前者。 通过实现Neo4jPersistentPropertyConverter可以解决给定类型的所有特定转换。 另外@ConvertWith还提供converterRef用于在应用程序上下文中引用任何 Spring bean 实现Neo4jPersistentPropertyConverter.引用的 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