Kri*_*wal 5 neo4j spring-data-neo4j-4 neo4j-ogm
我试图持久化一个类的对象列表,假设xyz。当我在NodeEntity类中执行此操作时:
@Property
List<xyz> listOfConditions
Run Code Online (Sandbox Code Playgroud)
通过Neo4jOperations.load(entity)方法从neo4j数据库加载Node表时,将返回错误消息:-将GraphModel映射到NodeEntity类型类时出错。
有什么方法可以将对象列表持久保存到Neo4j的节点属性上吗?我正在使用neo4j-ogm嵌入式驱动程序和Spring-data-neo4j。
Neo4j不支持将另一个对象存储为嵌套属性。Neo4j-OGM仅支持
任何原始,装箱的原始或String或其数组,本质上是自然适合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])
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以像这样用@Convert注释@NodeEntity
@NodeEntity
class Node {
@GraphId
Long id;
@Property
String name
@Convert(value = XYZConverter.class)
XYZ xyz
}
Run Code Online (Sandbox Code Playgroud)
另一方面,这样做不是一个好习惯,因为理想情况下,您应该使用“ hasA”关系链接Node和XYZ。Neo4j旨在优化处理此类关系,因此最好发挥Neo4j的优势
| 归档时间: |
|
| 查看次数: |
838 次 |
| 最近记录: |