2015-07-04 55 views
0

我使用OrientDb 2.1-rc4作爲文檔數據庫。我有一個MyClass類,它經常被多線程應用程序更新。爲了提高性能,我刪除了從State類到MyClass的鏈接,並添加了從MyClassState.的鏈接和索引。爲了獲得MyClass的所有實例,我需要獲取State rids的列表,然後查詢索引。這個查詢讓我的國家擺脫。OrientDB使用子查詢的結果搜索索引

SELECT DISTINCT([email protected]) 
FROM #12:1 

回報

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

此查詢在索引中的正確的RID。

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

當我把兩個查詢在一起。

SELECT FROM index:MWorkUnit.state 
where key in (SELECT DISTINCT([email protected]) FROM #12:1) 

我收到以下錯誤消息。

java.lang.ClassCastException:com.orientechnologies.orient.core.sql.query.OSQLSynchQuery不能轉換爲java.util.List的

如何獲得OrientDB對待我如子查詢一個清單?

編輯: 此查詢在不使用索引時有效。

SELECT FROM MWorkUnit 
where state IN (SELECT expand(roles.views.states)[email protected] FROM #12:1) 

回答

0

這似乎是一個針對索引查詢的錯誤:子查詢未正確評估。請你能開一個新的問題或者那個?

此解決辦法應該工作:

SELECT FROM index:MWorkUnit.state 
LET $list = (SELECT DISTINCT([email protected]) FROM #12:1) 
where key in $list