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