我正在尝试执行一个简单的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元素。我确信有一种直截了当的方式,只是看不到它。
选择连接文档数据的正确方法是什么?或者,有没有更好的方法来构建查询本身?
感谢。
答案 0 :(得分:0)
我已在Google网上论坛https://groups.google.com/d/msg/orient-database/ta4izTYq-CY/l5tHPOu5CgAJ
上回复了您