【发布时间】:2012-12-28 11:41:11
【问题描述】:
我有一个非常奇怪的问题,即从域对象转换为 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 documentation 中发现了以下文字:
使用 Spring 转换服务可转换为字符串的所有字段都将存储为字符串。
这是否意味着只支持转换为字符串?这似乎相当有限。
【问题讨论】:
标签: spring neo4j spring-data spring-data-neo4j