2016-11-22 56 views
1

我試圖執行一個簡單的sql查詢來從搜索到的文檔中檢索數據以及連接文檔的一些屬性。但是,由於某種原因,如何從連接文檔中選擇屬性遇到了死牆。這是我的簡單場景:OrientDB:無法從連接的文檔中選擇數據

我有2個文件,一個帳戶和一個用戶。帳戶文檔對名爲「用戶」的用戶具有優勢。我試圖通過電子郵件和密碼登錄用戶。如果找到了用戶的記錄,我只需要從帳戶文檔中獲取一些用戶數據和幾個屬性以存儲在用戶的會話中。

這裏是我的查詢:

try (ODatabaseDocumentTx db = DbPool.getConnection()) { 
    String sql 
      = " select @rid.asString() as userRid, firstName, lastName, " 
      + "  active as userActive, in('Employs') as account " 
      + "from User " 
      + "where email = ? and password = ?"; 

    OSQLSynchQuery<ODocument> query = new OSQLSynchQuery<>(sql); 
    List<ODocument> result = db.command(query).execute('[email protected]', 'abc'); 

    ODocument d = result.get(0); 

    System.out.println("1 "+ d.field("account.id")); 
    System.out.println("2 "+ d.field("userRid")); 
    System.out.println("3 "+ d.field("account.company")); 
    System.out.println("4 "+ d.field("firstName")); 
    System.out.println("5 "+ d.field("lastName")); 
    System.out.println("6 "+ d.field("account.active")); 
    System.out.println("7 "+ d.field("userActive")); 

    return new SessionUser(
      d.field("account.id"), 
      d.field("userRid"), 
      d.field("account.company"), 
      d.field("firstName"), 
      d.field("lastName"), 
      d.field("account.active"), 
      d.field("userActive")); 
} 

它無法創建SessionUser對象。更具體地說,它無法檢索帳戶屬性。下面是數據的外觀中的System.out:

1 [17] 
2 #37:0 
3 [Seller 1] 
4 Mike 
5 Maloney 
6 [true] 
7 true 
WARN : 2016-11-21 17:53:53,036 WARN c.t.e.k.c.ExceptionHandler - Error: java.util.LinkedHashSet cannot be cast to java.lang.Integer 

Here is how a single account.id property looks like in the debugger

我看到帳戶屬性來了作爲對象,只是無法弄清楚如何選擇它們很容易。我不想通過手動投射列表然後設置等來獲得一個簡單的account.id元素。我確信有一個簡單的方法,就是看不到它。

選擇連接文檔數據的正確方法是什麼?或者,有沒有更好的方法來構建查詢本身?

謝謝。

+0

您是否嘗試過使用'''.getProperty()'''方法? –

+0

你能舉一個例子來說明怎麼做嗎? – Borov

+0

只要做'''選擇*從用戶在哪裏電子郵件=?和password =?''',並使用該方法從它獲取屬性。 –

回答