下面是我的背景的概念性例子:
我有一个名为User
的抽象类(包含id
属性为String)
我有一个名为User
的{{1}}子类
我有一个名为FacebookUser
User
子类
使用Spring-Data-Neo4j,我将TwitterUser
设为User
。
我创建了一个测试类,以便在图表中插入@NodeEntity
和FacebookUser
。
整个井发生=>插入两个节点并具有 _ 类型 _ ,其中包含子类的完全限定名称。
例如:TwitterUser
。
现在,我想制作这种密码查询:
检索ID = 123 的用户
因此,我必须找到更有效的方法来检查所有用户节点(com.myApp.model.user.FacebookUser
和FacebookUser
的联合),以便找到唯一的相应记录。
我希望找到一种方法告诉cypher这样的事情:
将每个索引与TwitterUser
匹配,每个索引匹配FacebookUser
,并检查其中的预期节点
但我没有管理。
我当前的查询是:
TwitterUser
这个转换为:
检查图表中的所有节点(我想,根本不高效),然后保留那些以“User”结尾的节目(包括FacebookUser和TwitterUser)并检查右侧@Query("start u=node(*) where has(u.__type__) and u.__type__ =~ '.*User' and has(u.id) and u.id = {0} return u")
在这种情况下,有没有办法只使用索引节点,而不是扫描整个图形?
我在考虑将 _ 类型 _ 属性重命名为父类的完全限定名称的方法。
我们可以使用SDN轻松完成吗?
实际上,由于SDN似乎使用与节点关联的Java类名作为节点的索引名称,因此它只允许处理Facebook和Twitter子类型的一个索引节点:用户索引节点。
答案 0 :(得分:1)
如果你对类使用@Indexed,你应该得到像TwitterUser等索引,然后你可以使用你的查询。但是,继承方法存在限制,请参阅Spring Data Neo4j - Indexing and Inheritance进行相关讨论。