0

下面是我的上下文的概念示例:

我有一个名为的抽象类:(User包含一个id属性为字符串)
我有一个User名为的子类:FacebookUser
我有一个User名为的子类:TwitterUser

使用 Spring-Data-Neo4j,我制作User了一个@NodeEntity.

我创建了一个测试类,以便在图中插入 aFacebookUser和 a TwitterUser
整个井发生 => 两个节点都被插入并且有一个_类型_包含子类的完全限定名称。
例如: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")

这个翻译成:

检查图中的所有节点(我想,根本没有效率),然后保留那些以“用户”结尾的节点(包括 FacebookUser 和 TwitterUser)并检查正确的id

有没有办法在这种情况下只使用索引节点,而不是扫描整个图?

我正在考虑一种将_ type _属性重命名为父类的完整限定名的方法。

我们可以使用 SDN 轻松做到这一点吗?

实际上,由于 SDN 似乎使用与节点关联的 Java 类名称作为节点的索引名称,因此它只允许处理 Facebook 和 Twitter 子类型的一个索引节点:用户索引节点。

4

1 回答 1

1

如果您在类上使用 @Indexed,您应该获得 TwitterUser 等索引,然后您可以将其用于您的查询。但是,继承方法有一些限制,请参阅Spring Data Neo4j - Indexing and Inheritance以获得相关讨论。

于 2013-07-17T11:08:37.007 回答