我的结构如下:
公司 - >拥有一组用户 - >每个用户都有一套政策 - >每项政策都适用于公司。
示例图结构:
u1 <- c1 -> u2
p1 -> c1
u1 -> p1
公司(c1)有两个用户(u1,u2),一个政策(p1)属于公司(c1)。 &#34; U1&#34;采取了政策(p1)。 &#34; U2&#34;没有政策。
当我试图通过&#34; loadByProperty&#34;加载u2时方法,预期应该是User2对象和相应的公司(c1)。
但是,政策(p1)也在加载并设置为&#34; u2&#34;对象
班级结构;
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(里程碑版)。
有什么建议吗?谢谢你的到来。
答案 0 :(得分:1)
您可以通过多种方式按属性值加载实体。
<强> Neo4jOperations 强>
使用loadByProperty
或loadAllByProperty
派生的查找程序(仅限存储库)
@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
的任何Filter
方法。
例如:
session.loadAll(Person.class, new Filter("firstName", "John"))