OrientDB:无法 select 来自连接文档的数据
OrientDB: can't select data from connected document
我正在尝试执行一个简单的 sql 查询以从搜索的文档中检索数据以及连接文档的一些属性。但是,由于某些原因,运行 变成了死墙,关于如何从 select 中连接文件 属性。这是我的简单场景:
我有 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
我确实看到帐户属性是以对象的形式出现的,只是不知道如何 select 它们很容易。我不想通过手动转换列表然后设置等等来获得一个简单的 account.id 元素。我确定有一个直接的方法,只是看不到它。
连接文档的select数据的正确方法是什么?或者,是否有更好的方法来构造查询本身?
谢谢。
我已经在 Google 群 https://groups.google.com/d/msg/orient-database/ta4izTYq-CY/l5tHPOu5CgAJ
上回复了你
我正在尝试执行一个简单的 sql 查询以从搜索的文档中检索数据以及连接文档的一些属性。但是,由于某些原因,运行 变成了死墙,关于如何从 select 中连接文件 属性。这是我的简单场景:
我有 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
我确实看到帐户属性是以对象的形式出现的,只是不知道如何 select 它们很容易。我不想通过手动转换列表然后设置等等来获得一个简单的 account.id 元素。我确定有一个直接的方法,只是看不到它。
连接文档的select数据的正确方法是什么?或者,是否有更好的方法来构造查询本身?
谢谢。
我已经在 Google 群 https://groups.google.com/d/msg/orient-database/ta4izTYq-CY/l5tHPOu5CgAJ
上回复了你