2015-12-21 20 views
4

我想要的Category的POJO的數組傳遞給在SQL中使用IN查詢:orientdb:用「IN」上OType.LINKLIST場將數組傳遞給查詢

public ShareObject[] search(String name, Category[] categories) { 
... 
OSQLSynchQuery<ODocument> query = new OSQLSynchQuery<ODocument>("SELECT FROM ShareObject WHERE name LIKE ? AND categories IN ?"); 
List<ODocument> result = db.command(query).execute(name, categories); 

這將返回一個空列表。如果我改變的SQL以下我得到的結果:
"SELECT FROM ShareObject WHERE name LIKE ? AND categories IN [#10:0,#10:1]"

我也試過了,沒有sucess:

OSQLSynchQuery<ODocument> query = new OSQLSynchQuery<ODocument>("SELECT FROM ShareObject WHERE name LIKE ? AND categories IN ?"); 
List<ODocument> result = db.command(query).execute(name, new String[] { "#10:0", "#10:1" }); 
  • 我怎麼有數組傳遞給查詢,標識或物體?
  • 我必須更改SQL語句嗎?
  • 這甚至可能嗎?
+1

什麼樣的領域是 '類',它是一個鏈表? –

+0

是ShareObject.categories的類型是OType.LINKLIST –

回答

2

試試這個代碼:

OSQLSynchQuery<ODocument> query = new OSQLSynchQuery<ODocument>("SELECT FROM ShareObject WHERE name like ? AND categories IN (?)"); 
List<ODocument> result = db.command(query).execute(name,"[#10:0,#10:1]"); 
+0

感謝您的回答,是的,這確實有效,但我會優先傳遞一個對象或標識數組。 –

+1

帶有一個ID列表 列表 categories = new ArrayList (); categories.add(「#11:0」); categories.add(「#11:1」); \t \t \t \t \t OSQLSynchQuery 查詢=新OSQLSynchQuery (從 「選擇ShareObject WHERE名稱,比如和品類()?」); 列表 result = db.command(query).execute(name,categories.toString()); –

2

你可以試試這個:

String category="["; 
Category[] categories={new Category("#11:3"),new Category("#11:0")}; 
for(int i=0;i<categories.length;i++){ 
    if(i==categories.length-1) 
     category+=categories[i].getRid()+"]"; 
    else 
     category+=categories[i].getRid()+","; 
} 
OSQLSynchQuery<ODocument> query = new OSQLSynchQuery<ODocument>("SELECT FROM ShareObject WHERE name like ? AND categories IN (?)"); 
List<ODocument> result = db.command(query).execute(name,category);