【发布时间】:2013-07-16 00:19:00
【问题描述】:
下面是我的上下文的概念示例:
我有一个抽象类,名为:User(包含 id 属性作为字符串)
我有一个名为 User 的子类:FacebookUser
我有一个User 子类,名为:TwitterUser
使用 Spring-Data-Neo4j,我将 User 设为 @NodeEntity。
我创建了一个测试类,以便在图表中插入 FacebookUser 和 TwitterUser。
整个井发生 => 两个节点都已插入,并且有一个 _type_ 包含子类的完全限定名称。
例如:com.myApp.model.user.FacebookUser。
现在,我想进行这种密码查询:
检索 id = 123 的用户
因此,我必须找到更有效的方法来检查所有用户节点(FacebookUsers 和TwitterUser 的联合),以便找到唯一的对应记录。
我希望找到一种方法来告诉密码这样的事情:
获取每个匹配 FacebookUser 的索引,每个匹配 TwitterUser 的索引,并检查其中的预期节点
但我没有做到。
我当前的查询是:
@Query("start u=node(*) where has(u.__type__) and u.__type__ =~ '.*User' and has(u.id) and u.id = {0} return u")
这个翻译成:
检查图中的所有节点(我想,一点效率都没有),然后保留那些以“User”结尾的节点(包括 FacebookUser 和 TwitterUser)并检查正确的id
有没有办法在这种情况下只使用索引节点,而不是扫描整个图?
我正在考虑将 _type_ 属性重命名为父类的完整限定名的方法。
我们可以使用 SDN 轻松做到这一点吗?
确实,由于 SDN 似乎使用与节点关联的 Java 类名称作为节点的索引名称,因此它只允许处理 Facebook 和 Twitter 子类型的一个索引节点:用户 索引节点。
【问题讨论】:
标签: neo4j cypher spring-data-neo4j