0
我有一個用@RelationshipEntity註解的類。 這個類包含我用一些整數值定義的對象。 是否有可能以某種方式定義嵌套對象的成員將被保存爲關係的屬性?Spring Data Neo4j - 關於複雜類型成員的關係屬性
Justyna。
我有一個用@RelationshipEntity註解的類。 這個類包含我用一些整數值定義的對象。 是否有可能以某種方式定義嵌套對象的成員將被保存爲關係的屬性?Spring Data Neo4j - 關於複雜類型成員的關係屬性
Justyna。
是的,但它們應該轉換爲提供自定義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;
}
}
}
}
非常感謝你!這樣可行!但是,我有一種感覺,密碼查詢可能在分析這種複雜關係時遇到問題。你怎麼看? – gromajus
事實上,您將無法使用Cypher查詢中作爲字符串存儲的類的字段,您只能從已獲取的實體中訪問它們。如果您需要將字段放在查詢子句中,只需將您的嵌入式類建模爲圖形節點即可。 – remigio
@remigio這感覺就像一個'黑客'現在有更好的方法來做到這一點? – Selwyn