当关系类型用@RelationshipType
字段注释时,我在检索关系时遇到了困难。
虽然Neoclipse中的关系看起来正确,但在我的应用程序中没有检索到任何结果。
不起作用的代码如下(简化版):
@NodeEntity
public abstract class Entity {
@RelatedToVia
private Collection<Relationship> relationships;
public Relationship relatedTo(Entity entity, String type) {
Relationship relationship = new Relationship(type, this, entity);
relationships.add(relationship);
return relationship;
}
...
}
并且:
@RelationshipEntity
public class Relationship {
@RelationshipType
private String type;
...
}
能够工作的代码如下:
@RelationshipEntity(type = "something")
public class Relationship {
...
}
然而,这并不适合我的使用情况(我有许多不同的
关系
类型,连接任意组合的实体
实例)。下面是完整的测试代码。
机构
和物品
都是实体
的子类。// Create first entity
Agency arnz = agencyRepository.save(new Agency());
arnz.setCode("ARNZ");
agencyRepository.save(arnz);
// Create second entity
Item r123 = itemRepository.save(new Item());
r123.setCode("R123");
// Create parent/child relationship between entities
r123.relatedTo(arnz, EntityRelationshipType.PARENT);
itemRepository.save(r123);
// Retrieve entity from database
Entity entity = itemRepository.findByCode("R123");
// Verify that relationship is present
assertThat(entity.getRelationships().iterator().hasNext(), is(true));
最后一行是测试失败的地方。有什么线索吗?
M
PS. 我在Neo4j方面是一个业余爱好者,刚好找到了@RelationshipType
,所以我可能做错了什么可笑的事情。希望如此!
itemRepository.getRelationshipBetween(r123, arnz, Relationship.class, EntityRelationshipType.PARENT);
返回了预期的关系。然而,这仍然不符合我的用例需求,因此没有太大用处! - nullPainterNode node = template.getNode(entity.getId());
和随后调用node.getRelationships();
也能正确返回关系,只是以不太有用的node4j原始Relationship
类型返回。因此,显然这是Spring Data实现问题,而不是我的图形基本上出了什么问题? - nullPainter@RelatedToVia(direction = Direction.BOTH,type = EntityRelationshipType.PARENT)
,它就可以工作(即添加一个“类型”)。但这并不是很有用,因为我需要在同一集合中具有异构关系类型。或者这只是框架的限制?我正在使用2.1.0.BUILD-SNAPSHOT。 - nullPainter