Neo4j:loadByProperty 正在加载不属于该节点的其他对象

Neo4j : loadByProperty is loading the other objects that doesn't belong to the node

我的结构如下:

一个公司 -> 有一组用户 -> 每个用户都有一组策略 -> 每个策略是针对一个公司的。

样本图结构:

       u1 <- c1 -> u2 
       p1 -> c1
       u1 -> p1 

company(c1) 有两个用户 (u1, u2) 和一个策略 (p1) 属于 lo company(c1)。 "u1" 已采取政策 (p1)。 "u2" 没有政策。

当我尝试通过 "loadByProperty" 方法加载 u2 时,预期应该是 User2 对象和相应的 Company(c1)。

但是,策略 (p1) 也在加载并设置为 "u2" 对象。

Class结构;

Company{
   Stirng companyName;
   @Relationship(type = "hasUsers", direction = Relationship.OUTGOING)
   List<User> users;
}

User{
   Stirng userName;
   @Relationship(type = "hasPolicy", direction = Relationship.OUTGOING)
   List<Policy> policies;
}

Policy{
   String policyName;
   @Relationship(type = "forCompany", direction = Relationship.OUTGOING)
   Company company;
}

获取用户的方法:

 public User getUser(String userName) { 
    Property<String, Object> properties = new Property<String, Object("userName", userName); 
    Set<User> users = (Set<User>) session.loadByProperty(User.class, properties); 
    if (users != null && !users.isEmpty()) 
        for (User user : users) 
            return user; 
   return null; 
 }

使用 SDN 4(里程碑版本)。

有什么建议吗?谢谢提前。

您可以通过多种方式按 属性 值加载实体。

Neo4jOperations

使用loadByPropertyloadAllByProperty

派生查找器(仅限存储库)

@Repository
public interface UserRepository extends GraphRepository<User> {

User findByName(String name); 

}

SDN 将使用元数据信息将其转换为 Cypher 查询。

@Query(仅限存储库)

@Repository
public interface UserRepository extends GraphRepository<User> {

   @Query("MATCH (user:User{name:{0}}) RETURN user")
   User findUserByName(String name);

}

会话

使用任何接受 FilterloadAll 方法。 示例:

session.loadAll(Person.class, new Filter("firstName", "John"))