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
使用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);
}
会话
使用任何接受 Filter
的 loadAll
方法。
示例:
session.loadAll(Person.class, new Filter("firstName", "John"))
我的结构如下:
一个公司 -> 有一组用户 -> 每个用户都有一组策略 -> 每个策略是针对一个公司的。
样本图结构:
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
使用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);
}
会话
使用任何接受 Filter
的 loadAll
方法。
示例:
session.loadAll(Person.class, new Filter("firstName", "John"))