OrientDB:无法从已连接的文档

时间:2016-11-22 02:13:26

标签: orientdb

我正在尝试执行一个简单的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

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

我确实看到帐户属性作为对象进入,只是无法弄清楚如何轻松选择它们。我不想通过手动转换列表然后设置等来获得一个简单的account.id元素。我确信有一种直截了当的方式,只是看不到它。

选择连接文档数据的正确方法是什么?或者,有没有更好的方法来构建查询本身?

感谢。

1 个答案:

答案 0 :(得分:0)