Spring Data Neo4j(SDN)查询参数不使用Converter

时间:2014-11-19 19:28:29

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

我希望能够存储一组完全限定的类名作为Node的属性。鉴于此节点:

@NodeEntity
public TestNode {
  Set<Class<?>> classSet;

  //getters and setters here
}

以下自定义转换器:

public class ClassToStringConverter implements Converter<Class<?>, String> {
  @Override 
  public String convert(final Class<?> source) {
    return source.getName();
  }
}

public class StringToClassConverter implements Converter<String, Class<?>> {
  @Override 
  public String convert(final String source) {
    Class<?> returnVal = null;
    try {
      returnVal = Class.forName(source);
    } catch (ClassNotFoundException e) { }
    return returnVal;
  } 
}

我使用Spring上下文注册转换器:

<bean id="conversionService" 
  class="org.springframework.context.support.ConversionServiceFactoryBean">
  <property name="converters">
    <set>
      <bean class="my.package.ClassToStringConverter"/>
      <bean class="my.package.StringToClassConverter "/>
    </set>
  </property>
</bean>

然后使用我的存储库,我可以正确保存和检索节点,并使用我的自定义转换器按预期存储完全限定的类名。但是,我希望能够在我的存储库中按类名查询:

@Query("MATCH (m:TestNode) where {0} in m.classSet return m;")
public findByClassInClassSet(Class<?> clazz);

但是,这似乎使用Class.toString()转换Class而不是使用我的Converter。所以它正在搜索String&#34;类my.package.TestNode&#34;而不是转换器正确存储为&#34; my.package.TestNode&#34;。

我在这里错过了什么或做错了吗?如果我不能使用Class类型进行查询,那么如何从这些转换器中受益?

注意:请原谅任何拼写错误 - 此代码在断开连接的网络上,因此我无法复制粘贴。如果有任何拼写错误,我向您保证这不是我实际代码中的问题。

1 个答案:

答案 0 :(得分:0)

应在派生查找器的下一个里程碑版本中修复。

对于带注释的查询方法,SDN无法知道您所引用的参数,因此无法将其转换为。