変換

規約ベースのマッピング

Neo4j コンバーターには、追加のマッピングメタデータが提供されない場合にオブジェクトをマッピングするためのいくつかの規則があります。規約は次のとおりです。

  • 短い Java クラス名は、次の方法でプライマリラベルにマップされます。クラス com.bigbank.SavingsAccount は、savingsAccount プライマリラベルにマップされます。

  • コンバーターは、登録されている Spring コンバーターを使用して、オブジェクトプロパティのノードフィールドおよび値へのデフォルトのマッピングをオーバーライドします。

  • オブジェクトのフィールドは、グラフ内のフィールドとの間の変換に使用されます。パブリック JavaBean プロパティは使用されません。

  • コンストラクター引数名がノードのトップレベルのプロパティ名と一致する非ゼロ引数のコンストラクターが 1 つある場合、そのコンストラクターが使用されます。それ以外の場合は、引数なしのコンストラクターが使用されます。引数がゼロではないコンストラクターが複数ある場合、例外がスローされます。

すぐに使える幅広い変換をサポートします。公式ドライバーマニュアルでサポートされている暗号型のリストを見つけてください: 型マッピング (英語)

ラッパー型のプリミティブ型も同様にサポートされます。

ドメインの種類 暗号の種類 ネイティブ型に直接マッピングします

java.lang.Boolean

Boolean

boolean[]

ブール値のリスト

java.lang.Long

整数

long[]

整数のリスト

java.lang.Double

フロート

double[]

フロート一覧

java.lang.String

String

java.lang.String[]

文字列のリスト

byte[]

ByteArray

java.lang.Byte

長さ 1 の ByteArray

java.lang.Character

長さ 1 の文字列

char[]

長さ 1 の文字列のリスト

java.util.Date

ISO 8601 日付 (yyyy-MM-dd’T’HH:mm:ss.SSSZ) としてフォーマットされた文字列。Z:SDN はすべての java.util.Date インスタンスを UTC に保存することに注意してください。タイムゾーンが必要な場合は、それをサポートする型 (つまり ZoneDateTime) を使用するか、ゾーンを別のプロパティとして保存します。

java.lang.Float

String

float[]

文字列のリスト

java.lang.Integer

整数

int[]

整数のリスト

java.util.Locale

BCP 47 言語タグとしてフォーマットされた文字列

java.lang.Short

整数

short[]

整数のリスト

java.math.BigDecimal

String

java.math.BigInteger

String

java.time.LocalDate

日付

java.time.OffsetTime

時間

java.time.LocalTime

LocalTime

java.time.ZonedDateTime

日時

java.time.LocalDateTime

LocalDateTime

java.time.OffsetDateTime

日時

java.time.Instant

日時

java.util.TimeZone

String

java.time.ZoneId

String

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

String

java.net.URI

String

java.util.UUID

String

カスタム変換

特定の型の属性の場合

エンティティ内で独自の型を操作する場合、または @Query アノテーション付きメソッドのパラメーターとして独自の型を操作する場合は、カスタムコンバーター実装を定義して提供できます。まず、GenericConverter を実装し、コンバーターが処理する必要がある型を登録する必要があります。エンティティプロパティの型コンバーターの場合、型を Neo4j Java Driver 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 に登録する必要があります。これを行うには、org.springframework.data.neo4j.core.convert.Neo4jConversions 型の @Bean を作成する必要があります。それ以外の場合、Neo4jConversions は内部のデフォルトコンバーターのみを使用してバックグラウンドで作成されます。

カスタムコンバーターの実装例
@Bean
public Neo4jConversions neo4jConversions() {
	Set<GenericConverter> additionalConverters = Collections.singleton(new MyCustomTypeConverter());
	return new Neo4jConversions(additionalConverters);
}

アプリケーションで複数のコンバーターが必要な場合は、Neo4jConversions コンストラクターに必要な数だけコンバーターを追加できます。

特定の属性のみ

一部の特定の属性のみの変換が必要な場合は、@ConvertWith が提供されます。これは、エンティティ (@Node) と関連プロパティ (@RelationshipProperties) の両方の属性に付けることができるアノテーションです。これは、converter 属性を介して Neo4jPersistentPropertyConverter を定義し、前者を構築するオプションの Neo4jPersistentPropertyConverterFactory を定義します。Neo4jPersistentPropertyConverter の実装により、特定の型のすべての特定の変換に対処できます。さらに、@ConvertWith は、Neo4jPersistentPropertyConverter を実装するアプリケーションコンテキストで Spring Bean を参照するための converterRef も提供します。新しいコンバーターを構築するよりも、参照されている Bean が優先されます。

ネイティブ型を使用しない Neo4j-OGM スキームとの下位互換性のために、メタアノテーション付きアノテーションとして @DateLong および @DateString を提供します。これらは、上記の概念に基づいて構築されたメタアノテーション付きのアノテーションです。

複合プロパティ

@CompositeProperty を使用すると、型 Map<String, Object> または Map<? extends Enum, Object> の属性を複合プロパティとして保存できます。マップ内のすべてのエントリは、プロパティを含むノードまたはリレーションシップにプロパティとして追加されます。構成済みの接頭辞を付けるか、プロパティの名前を接頭辞として付けます。この機能はすぐに使用できるマップに対してのみ提供されますが、Neo4jPersistentPropertyToMapConverter を、@CompositeProperty で使用するコンバーターとして構成することができます。Neo4jPersistentPropertyToMapConverter は、特定の型をマップに分解し、マップから再構成する方法を知る必要があります。