Java Spring数据Neo4j(SDN)查询参数不使用转换器
我希望能够将一组完全限定的类名存储为节点的属性。给定此节点:Java Spring数据Neo4j(SDN)查询参数不使用转换器,java,spring,neo4j,spring-data,spring-data-neo4j,Java,Spring,Neo4j,Spring Data,Spring Data Neo4j,我希望能够将一组完全限定的类名存储为节点的属性。给定此节点: @NodeEntity public TestNode { Set<Class<?>> classSet; //getters and setters here } 和以下自定义转换器: public class ClassToStringConverter implements Converter<Class<?>, String> { @Override pub
@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而不是使用我的转换器来转换类。因此,它正在搜索字符串类my.package.TestNode,而不是转换器正确存储为my.package.TestNode的内容
我是错过了什么还是做错了什么?如果不能使用类类型进行查询,如何从这些转换器中获益
注意:请原谅任何打字错误-此代码位于断开连接的网络上,因此我无法复制粘贴。如果有任何拼写错误,我向您保证这不是我实际代码的问题。应该在衍生查找程序的下一个里程碑版本中修复
对于带注释的查询方法,SDN无法知道您的参数所指的是什么,因此它将永远无法转换它。谢谢@Michael Hunger。请看我提出的这个要求。