ドメインオブジェクトからNeo4jがプロパティ値としてネイティブに保存できるものへの変換には、本当に奇妙な問題があります。テスト ケースとして、Joda の DateTime を使用します。そのタイプのオブジェクトは、非常に簡単に String または Long に変換できます。
DateTime から String への変換は、次のコードで問題なく機能します。
public class DateTimeToStringConverter implements Converter<DateTime, String> {
@Override
public String convert(DateTime source) {
return source.toDateTimeISO().toString();
}
}
プロパティがノードに表示されます。
Node[1] {
'__type__' = '...',
'entityEditedAt' = '2012-12-28T12:32:50.308+01:00',
'entityCreatedAt' = '2012-12-28T12:32:50.297+01:00',
...
}
ただし、DateTime を Long として保存したい場合 (Cypher で時間でソートするのに便利です)、まったく機能しません。これが私のコンバーターです:
public class DateTimeToLongConverter implements Converter<DateTime, Long> {
@Override
public Long convert(DateTime source) {
return source.toDateTimeISO().getMillis();
}
}
プロパティはノードに保存されません。したがって、完全に欠落しています。例外はスローされません。変換コードがまったく呼び出されていないようです。
コンバーターは、コードベースの構成を使用して Spring Data にフックされます。
@Bean
public ConversionServiceFactoryBean conversionService() {
Set converters = Sets.newHashSet();
// These work!
converters.add(new DateTimeToStringConverter());
converters.add(new StringToDateTimeConverter());
// These don't :-(
//converters.add(new DateTimeToLongConverter());
//converters.add(new LongToDateTimeConverter());
ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean();
bean.setConverters(converters);
return bean;
}
手がかりはありますか?私の意見ではうまくいくはずなので、私はここでかなり迷っています...
編集Spring Data Neo4j のドキュメントで次のテキストを見つけました:
Spring 変換サービスを使用して文字列に変換可能なすべてのフィールドは、文字列として保存されます。
これは、文字列への変換のみがサポートされているということですか? これはかなり限定的なようです。