2

我的结构如下:

一家公司 -> 拥有一组用户 -> 每个用户都有一组政策 -> 每个政策都适用于一家公司。

示例图结构:

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

公司 (c1) 有两个用户 (u1, u2) 并且策略 (p1) 属于公司 (c1)。“u1”已采取策略(p1)。“u2”没有策略。

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

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

班级结构;

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(里程碑版)。

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

4

1 回答 1

1

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

Neo4j 操作

使用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);

}

会议

使用任何loadAll接受 a 的方法Filter。例子:

session.loadAll(Person.class, new Filter("firstName", "John"))
于 2015-08-20T06:52:38.417 回答