OrientDB使用子查询的结果来搜索索引

时间:2015-07-04 08:17:22

标签: java sql orientdb

我使用OrientDb 2.1-rc4作为文档数据库。我有一个MyClass类,它经常被多线程应用程序更新。为了提高性能,我删除了从State类到MyClass的链接,并添加了从MyClassState.的链接和索引,以便获取{{1}的所有实例我需要获取MyClass rids的列表,然后查询索引。此查询获取我的状态rids。

State

返回

SELECT DISTINCT(roles.views.states.@rid) 
FROM #12:1

此查询在索引中找到正确的rids。

[["#14:0","#14:1"]]

当我把两个问题放在一起时。

SELECT FROM index:MyClass.state 
where key in [#14:0,#14:1] 

我收到以下错误。

  

java.lang.ClassCastException:com.orientechnologies.orient.core.sql.query.OSQLSynchQuery无法强制转换为java.util.List

如何让OrientDB将我的子查询视为一个清单?

编辑: 不使用索引时此查询有效。

SELECT FROM index:MWorkUnit.state 
where key in (SELECT DISTINCT(roles.views.states.@rid) FROM #12:1) 

1 个答案:

答案 0 :(得分:0)

这似乎是对索引的查询错误:未正确评估子查询。请问你能打开一个新问题吗?

此解决方法应该有效:

SELECT FROM index:MWorkUnit.state 
LET $list = (SELECT DISTINCT(roles.views.states.@rid) FROM #12:1) 
where key in $list
相关问题