gpt4 book ai didi

neo4j - 如何将 List 持久化为节点的属性?

转载 作者:行者123 更新时间:2023-12-04 17:32:19 29 4
gpt4 key购买 nike

我正在尝试保留一个假设为 xyz 的类的对象列表。当我在 NodeEntity 类中执行此操作时:

@Property
List<xyz> listOfConditions

当通过 Neo4jOperations.load(entity) 方法从 neo4j 数据库加载节点表时,将返回一个错误说:- 错误将 GraphModel 映射到 NodeEntity 类型类。

有没有办法将对象列表持久化到 Neo4j 中的节点属性上?我正在使用 neo4j-ogm-embedded 驱动程序和 Spring-data-neo4j。

最佳答案

Neo4j 不支持将另一个对象存储为嵌套属性。 Neo4j-OGM 仅支持

any primitive, boxed primitive or String or arrays thereof, essentially anything that naturally fits into a Neo4j node property.



如果您想解决这个问题,您可能需要创建一个自定义类型转换器。例如,
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 注释 @NodeEntity
@NodeEntity
class Node {
@GraphId
Long id;

@Property
String name

@Convert(value = XYZConverter.class)
XYZ xyz
}

另一方面,这样做不是一个好习惯,因为理想情况下您应该使用“hasA”关系链接 Node 和 XYZ。 Neo4j 旨在以最佳方式处理此类关系,因此最好发挥 Neo4j 的优势

关于neo4j - 如何将 List<CustomObject> 持久化为节点的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39324747/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com