簡體   English   中英

OrientDB:無法從連接的文檔中選擇數據

[英]OrientDB: can't select data from connected document

我正在嘗試執行一個簡單的SQL查詢來從搜索的文檔中檢索數據以及連接文檔的一些屬性。 但是,由於某種原因,如何從連接文檔中選擇屬性陷入了困境。 這是我的簡單場景:

我有2個文件,一個帳戶和一個用戶。 帳戶文檔對名為“Employs”的用戶具有優勢。 我正在嘗試通過電子郵件和密碼登錄用戶。 如果找到用戶的記錄,我只需要從帳戶文檔中獲取一些用戶數據和少量屬性,以存儲在用戶的會話中。

這是我的查詢:

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('test@test.com', '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

以下是調試器中單個account.id屬性的外觀

我確實看到帳戶屬性作為對象進入,只是無法弄清楚如何輕松選擇它們。 我不想通過手動轉換列表然后設置等來獲得一個簡單的account.id元素。 我確信有一種直截了當的方式,就是看不到它。

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

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM