2014-04-02 67 views

回答

0

是的,但它们应该转换为提供自定义Spring转换器的字符串。为了避免为需要嵌入的每个类声明一个转换器,可以扩展一个通用接口(甚至是一个空接口,只是声明转换器)。 该转换器必须在SDN配置文件中作如下声明:

<bean id="conversionService" 
      class="org.springframework.context.support.ConversionServiceFactoryBean"> 
     <property name="converters"> 
      <list> 
       <bean class="..."/> 
       <bean class="..."/> 
      </list> 
     </property> 
</bean> 

应该定义两个转换器,一个用于从字符串对象转换为字符串,另一个用于相反的转换的对象。 例如,使用Gson:

final class ToStringConverterFactory implements ConverterFactory<MyClass, String> { 

    @Override 
    public <T extends String> Converter<MyClass, T> getConverter(Class<T> type) { 
     return new ToStringConverter(type); 
    } 

    private final class ToStringConverter<E extends MyClass, S extends String> implements Converter<E, S> { 

     private Class<S> stringType; 

     public ToStringConverter(Class<S> stringType) { 
      this.stringType = stringType; 
     } 

     @Override 
     public S convert(E source) { 
      if (source != null) { 
       return (S) new Gson().toJson(source); 
      } else { 
       return null; 
      } 
     } 
    } 
} 

final class ToObjectConverterFactory implements ConverterFactory<String, MyClass> { 

    @Override 
    public <T extends MyClass> Converter<String, T> getConverter(Class<T> type) { 
     return new ToObjectConverter(type); 
    } 

    private final class ToObjectConverter<S extends String, E extends MyClass> implements Converter<S, E> { 

     private Class<E> objectType; 

     public ToObjectConverter(Class<E> objectType) { 
      this.objectType = objectType; 
     } 

     @Override 
     public E convert(S source) { 
      if (source != null) { 
       return (E) new Gson().fromJson(source, objectType); 
      } else { 
       return null; 
      } 
     } 
    } 
} 
+0

非常感谢你!这样可行!但是,我有一种感觉,密码查询可能在分析这种复杂关系时遇到问题。你怎么看? – gromajus

+0

事实上,您将无法使用Cypher查询中作为字符串存储的类的字段,您只能从已获取的实体中访问它们。如果您需要将字段放在查询子句中,只需将您的嵌入式类建模为图形节点即可。 – remigio

+0

@remigio这感觉就像一个'黑客'现在有更好的方法来做到这一点? – Selwyn