2014-04-02 87 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