Spring Data Neo4j:将对象转换为字符串工作,但不执行long对象

时间:2012-12-28 11:41:12

标签: spring neo4j spring-data spring-data-neo4j

我有一个非常奇怪的问题,从域对象转换为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转换服务转换为String的所有字段都将存储为字符串。

这是否意味着,只支持转换为字符串?这似乎是相当有限的。

1 个答案:

答案 0 :(得分:4)

告诉SDN您希望将joda DateTime属性存储为long:

@NodeEntity
public class MyEntity {
    ...
    @GraphProperty(propertyType = Long.class)
    private DateTime timestamp;
    ....
}

然后您注册的DateTimeToLongConverter将启动。