超类中的java泛型关系
我使用Spring数据Neo4j将Java实体写入Neo4j数据库。对象模型相当通用:
public abstract class AbstractNode {
@GraphId
private Long id;
@Index(primary = true, unique = true)
private String uuid;
@Relationship(type = "CONTAINS")
private Set<AbstractNode> containsNode;
...
}
@NodeEntity
public class Country extends AbstractNode { ... }
@NodeEntity
public class Region extends AbstractNode { ... }
@NodeEntity
public class City extends AbstractNode { ... }
我正在创建一个国家。在这个国家,我放了一个地区,在这个地区,我放了一个城市。之后,我调用Neo4jRepository.save(country)
(当然,在我自己的接口上继承自Neo4jRepository),以使整个图形持久化:
Country -> Region -> City
在Neo4j Embedded的日志中,我可以看到1个国家、1个地区和1个城市被保留下来
现在,我在一次新的会议中向全国发表讲话。结果是1个国家和1个地区。但该地区不包括一座城市,而是一个国家:
Country -> Region -> Country
如何持久化此类通用对象图
# 1 楼答案
您还需要为
containsNode
的setter添加@Relationship
注释:当您不执行此操作时,OGM/SDN会尝试从country匹配region上传入的
CONTAINS
关系,并找到匹配类型的setter并使用它。在setter上使用@Relationship表示,这应该只用于传出,而不是正确映射对象