我有一个使用Spring Data Neo4j 4(4.0.0.RELEASE和Neo4j社区服务器2.2.5)的Spring Boot应用程序。我使用neo4j-ogm库的最新快照版本(1.1.4-SNAPSHOT)作为SDN 4的依赖项。当存在多个关系时,应用程序和现在的集成测试不会像我期望的那样(不使用关系实体)在相同的两个节点实体类之间按关系类型区分。
失败的集成测试的两个节点实体类是:
@NodeEntity
public class TypeD {
@GraphId
private Long id;
@Relationship(type = "ONE", direction = Relationship.OUTGOING)
private TypeE one;
@Relationship(type = "MANY", direction = Relationship.OUTGOING)
private Set<TypeE> many;
private String identifier;
...
@NodeEntity
public class TypeE {
@GraphId
private Long id;
@Relationship(type = "ONE", direction = Relationship.INCOMING)
private Set<TypeD> firstColl;
@Relationship(type = "MANY", direction = Relationship.INCOMING)
private Set<TypeD> secondColl;
...
集成测试从两个节点开始,这两个节点已存在于数据存储区中
// Find the TypeE node using its String identifier
TypeE e = typeERepository.findByIdentifier(EEE);
assertNotNull(e);
assertEquals(EEE, e.getIdentifier());
// Create a new TypeD object
TypeD d = new TypeD();
// and create a relationship between d and the TypeE node
d.setOne(e);
d.setIdentifier(TWO);
// note that the e object is NOT added to the many collection
// and save d
TypeD savedD = typeDRepository.save(d);
我原本预计会有结果
但实际上
出乎意料地 - 至少对我来说 - 在创建和保存新对象之前存在的节点之间建立了新的关系。
当从多个(EEE)&lt; - [:ONE] - (d)数据存储区中的关系开始时,每个(d)在创建新的TypeD对象时获得与(EEE)的新[:MANY]关系保存。
其中一个真正的应用场景是用户所有权和与其他项目的许可关系。因此TypeE将是User,TypeD是拥有或许可的Item。用户可以拥有或许可多个相同类型的项目。一个项目只能拥有一个所有者,但它可以被许可给多个用户。因此,测试中的关系将是ONE =所有者和MANY =被许可人。
这里有错误或有人见过类似的吗?