我试图坚持一个类的对象列表,假设是xyz。当我在NodeEntity类中执行此操作时:
@Property
List<xyz> listOfConditions
通过Neo4jOperations.load(entity)方法从neo4j数据库加载时,Node表将返回错误说明: - 错误将GraphModel映射到NodeEntity类型类。
有没有办法将对象列表保存到Neo4j中的节点属性上?我正在使用neo4j-ogm嵌入式驱动程序和Spring-data-neo4j。
答案 0 :(得分:4)
Neo4j不支持将另一个对象存储为嵌套属性。 Neo4j-OGM仅支持
任何原始的盒装基元或字符串或其数组, 基本上任何自然适合Neo4j节点属性的东西。
如果您想解决此问题,可能需要创建自定义类型转换器。例如,
import org.neo4j.ogm.typeconversion.AttributeConverter
class XYZ{
XYZ(Integer x, String y) {
this.x = x
this.y = y
}
Integer x
String y
}
public class XYZConverter implements AttributeConverter<XYZ, String> {
@Override
public String toGraphProperty(XYZ value) {
return value.x.toString() + "!@#" + value.y
}
@Override
public XYZ toEntityAttribute(String value) {
String[] split = value.split("!@#")
return new XYZ(Integer.valueOf(split[0]), split[1])
}
}
然后,您可以使用像@Convert这样的@Convert注释@NodeEntity
@NodeEntity
class Node {
@GraphId
Long id;
@Property
String name
@Convert(value = XYZConverter.class)
XYZ xyz
}
另一方面,这不是一个很好的做法,因为理想情况下你应该将Node和XYZ与'hasA'关系联系起来。 Neo4j的设计旨在最佳地处理这种关系,因此最好能够发挥neo4j的优势
答案 1 :(得分:3)
否,OGM不支持在单个节点上表示为属性的嵌套对象。唯一的选择是编写自定义转换器以将嵌套对象序列化为String表示形式并将其存储为单个属性。
否则,节点上的对象列表将被视为从节点到这些对象的关系。
以下是手册的链接以供进一步参考:http://neo4j.com/docs/ogm-manual/current/