最新的稳定版本请使用 Spring Data Neo4j 7.3.1

最新的稳定版本请使用 Spring Data Neo4j 7.3.1

基于约定的映射

Neo4j Converter 有一些约定,用于在没有提供其他映射元数据时映射对象。 约定是:

  • 短 Java 类名按以下方式映射到主标签: 该类映射到主标签。com.bigbank.SavingsAccountsavingsAccount

  • 转换器使用在其注册的任何 Spring Converter 来覆盖对象属性到节点字段和值的默认映射。

  • 对象的字段用于在图形中的字段之间进行转换。 不使用公共属性。JavaBean

  • 如果有一个非零参数构造函数,其构造函数参数名称与节点的顶级属性名称匹配,则使用该构造函数。 否则,将使用零参数构造函数。 如果存在多个非零参数构造函数,则会引发异常。

我们支持开箱即用的广泛转换。 在官方驱动程序手册中查找支持的密码类型列表:类型映射

同样支持包装器类型的基元类型。

域类型 Cypher类型 直接映射到本机类型

java.lang.Boolean

布尔

boolean[]

布尔值列表

java.lang.Long

整数

long[]

整数列表

java.lang.Double

double[]

浮动列表

java.lang.String

字符串

java.lang.String[]

字符串列表

byte[]

字节数组

java.lang.Byte

长度为 1 的 ByteArray

java.lang.Character

长度为 1 的字符串

char[]

长度为 1 的字符串列表

java.util.Date

格式为 ISO 8601 日期 () 的字符串。 请注意:SDN 会将所有实例存储在 中。 如果需要时区,请使用支持时区的类型(即 )或将区域存储为单独的属性。yyyy-MM-dd’T’HH:mm:ss.SSSZZjava.util.DateUTCZoneDateTime

java.lang.Float

字符串

float[]

字符串列表

java.lang.Integer

整数

int[]

整数列表

java.util.Locale

格式为 BCP 47 语言标记的字符串

java.lang.Short

整数

short[]

整数列表

java.math.BigDecimal

字符串

java.math.BigInteger

字符串

java.time.LocalDate

日期

java.time.OffsetTime

时间

java.time.LocalTime

当地时间

java.time.ZonedDateTime

日期时间

java.time.LocalDateTime

本地日期时间

java.time.OffsetDateTime

日期时间

java.time.Instant

日期时间

java.util.TimeZone

字符串

java.time.ZoneId

字符串

java.time.Period

期间

java.time.Duration

期间

org.neo4j.driver.types.IsoDuration

期间

org.neo4j.driver.types.Point

org.springframework.data.neo4j.types.GeographicPoint2d

使用 CRS 4326 点

org.springframework.data.neo4j.types.GeographicPoint3d

使用 CRS 4979 点

org.springframework.data.neo4j.types.CartesianPoint2d

使用 CRS 7203 点

org.springframework.data.neo4j.types.CartesianPoint3d

使用 CRS 9157 点

org.springframework.data.geo.Point

CRS 4326 和 x/y 对应纬度/经度的点

实例Enum

String(枚举的名称值)

实例Enum[]

字符串列表(枚举的名称值)

java.net.URL

字符串

java.net.URI

字符串

java.util.UUID

字符串

域类型 Cypher类型 直接映射到本机类型

java.lang.Boolean

布尔

boolean[]

布尔值列表

java.lang.Long

整数

long[]

整数列表

java.lang.Double

double[]

浮动列表

java.lang.String

字符串

java.lang.String[]

字符串列表

byte[]

字节数组

java.lang.Byte

长度为 1 的 ByteArray

java.lang.Character

长度为 1 的字符串

char[]

长度为 1 的字符串列表

java.util.Date

格式为 ISO 8601 日期 () 的字符串。 请注意:SDN 会将所有实例存储在 中。 如果需要时区,请使用支持时区的类型(即 )或将区域存储为单独的属性。yyyy-MM-dd’T’HH:mm:ss.SSSZZjava.util.DateUTCZoneDateTime

java.lang.Float

字符串

float[]

字符串列表

java.lang.Integer

整数

int[]

整数列表

java.util.Locale

格式为 BCP 47 语言标记的字符串

java.lang.Short

整数

short[]

整数列表

java.math.BigDecimal

字符串

java.math.BigInteger

字符串

java.time.LocalDate

日期

java.time.OffsetTime

时间

java.time.LocalTime

当地时间

java.time.ZonedDateTime

日期时间

java.time.LocalDateTime

本地日期时间

java.time.OffsetDateTime

日期时间

java.time.Instant

日期时间

java.util.TimeZone

字符串

java.time.ZoneId

字符串

java.time.Period

期间

java.time.Duration

期间

org.neo4j.driver.types.IsoDuration

期间

org.neo4j.driver.types.Point

org.springframework.data.neo4j.types.GeographicPoint2d

使用 CRS 4326 点

org.springframework.data.neo4j.types.GeographicPoint3d

使用 CRS 4979 点

org.springframework.data.neo4j.types.CartesianPoint2d

使用 CRS 7203 点

org.springframework.data.neo4j.types.CartesianPoint3d

使用 CRS 9157 点

org.springframework.data.geo.Point

CRS 4326 和 x/y 对应纬度/经度的点

实例Enum

String(枚举的名称值)

实例Enum[]

字符串列表(枚举的名称值)

java.net.URL

字符串

java.net.URI

字符串

java.util.UUID

字符串

自定义转换

对于给定类型的属性

如果您希望在实体中使用自己的类型或作为批注方法的参数,则可以定义并提供自定义转换器实现。 首先,您必须实现并注册转换器应处理的类型。 对于实体属性类型转换器,您需要注意将类型与Neo4j Java Driver相互转换。 如果转换器应该仅与存储库中的自定义查询方法一起使用,则提供对类型的单向转换就足够了。@QueryGenericConverterValueValue

自定义转换器实现示例
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@Beanorg.springframework.data.neo4j.core.convert.Neo4jConversionsNeo4jConversions

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

如果应用程序中需要多个转换器,则可以在构造函数中根据需要添加任意数量的转换器。Neo4jConversions

仅适用于特定属性

如果您只需要针对某些特定属性进行转化,我们提供 . 这是一个注释,可以放在实体 () 和关系属性 () 的属性上 它定义了一个 via 属性 以及构建前者的可选选项。 通过实现给定类型的所有特定转换,可以解决。 此外,还提供了在应用程序上下文中引用任何 Spring Bean 实现 。引用的 Bean 将优先于构造新的转换器。@ConvertWith@Node@RelationshipPropertiesNeo4jPersistentPropertyConverterconverterNeo4jPersistentPropertyConverterFactoryNeo4jPersistentPropertyConverter@ConvertWithconverterRefNeo4jPersistentPropertyConverter

我们提供 和 作为元注释的注释,以便向后兼容不使用本机类型的 Neo4j-OGM 方案。 这些是建立在上述概念基础上的元注释注释。@DateLong@DateString

复合材料特性

对于 ,或类型的属性可以存储为复合属性。 映射中的所有条目都将作为属性添加到包含该属性的节点或关系中。 使用配置的前缀或以属性名称为前缀。 虽然我们只为开箱即用的地图提供该功能,但您可以对其进行配置 作为要使用的转换器。A 需要知道给定类型如何 分解为地图并从地图中组合回来。@CompositePropertyMap<String, Object>Map<? extends Enum, Object>Neo4jPersistentPropertyToMapConverter@CompositePropertyNeo4jPersistentPropertyToMapConverter