検索されたドキュメントや接続されたドキュメントのいくつかのプロパティからデータを取得するために、単純な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要素に到達することはしませんでした。まっすぐ進む道があると確信しています、ただそれを見ることはできません。
接続されたドキュメントのデータを選択する正しい方法は何ですか?または、クエリ自体を構築するより良い方法はありますか?
ありがとうございました。
であなたに答えましたか? –
あなたは私にそれを行う方法の例を教えてもらえますか? – Borov
'' 'select * from user where email =?パスワード=? '' 'を指定し、そのメソッドを使用してプロパティを取得するよりも優先されます。 –