保留不是NodeEntity属性的RelationshipEntity

时间:2015-10-15 10:43:53

标签: java neo4j spring-data-neo4j spring-data-neo4j-4

在SDN4中,我希望保留@RelationshipEntity不属于@NodeEntity的属性。 例如:

@NodeEntity
public class User{
    Long id;
}

@RelationshipEntity(type="FOLLOWS")
public class Follows{
    @GraphId   private Long relationshipId;
    @StartNode private User follower;
    @EndNode   private User followee;
    @Property  private Date from;

    public Follows(){}
    public Follows(User u1, User u2){
         this.follower = u1;
         this.followee = u2;
    }
}

@Repository
interface FollowsRepository extends GraphRepository<Follows>{}

然后像这样坚持Follows @Relationship

...
followsRepository.save(new Follows(user1, user2));
...   

但是这样做时,关系就不会持久!!

可悲如接受的答案中所说,这还不能(尚未)完成(SDN 4.0.0.RELEASE)

解决方法1

可以在@RelationshipEntities中使用@Query保留GraphRepositories

@Query("Match (a:User), (b:User) WHERE id(a) = {0} 
                     AND id(b) = {1} CREATE (a)-[r:FOLLOWS {date:{2}}]->(b) RETURN r ")

解决方法2

这也可以通过将Follows视为@NodeEntity来完成,这可能不是最有效的事情不会影响任何{{1}域名,服务层 AND 你在加载和持久化实体时不必弄乱深度因素

@NodeEntities

1 个答案:

答案 0 :(得分:3)

目前,当未从参与节点实体引用关系实体时,您无法直接保留关系实体。 您必须保存起始节点并确保它具有对关系实体的引用。

关于关系实体如何持久化会有一些增强,但在下一版本中不会。