Hi,
in('Employs') returns a list, if you know that it can be only one document in
it you can try modifying your query adding *[0]*
*String sql = " select @rid.asString() as userRid, firstName,
lastName, " + " active as userActive, in('Employs')[0] as
account " + "from User " + "where email = ? and
password = ?";*
Bye,
Ivan
Il giorno lunedì 28 novembre 2016 21:09:14 UTC+1, Borov ha scritto:
>
> Hi guys, I posted this question on stackoverflow
> <http://stackoverflow.com/questions/40732762/orientdb-cant-select-data-from-connected-document>
> last
> week, but didn't get an answer, so I decided to re-posted it here.
>
>
> *Using OrientDB v2.2.12*. I'm trying to execute a simple sql query to
> retrieve data from the document searched as well as few properties of a
> connected document. But, for some reason ran into a dead wall on how to
> select the property *from the connected document*. Here is my simple
> scenario:
>
>
> I have 2 documents, an Account and a User. Account document has an edge to
> a User named 'Employs'. I'm trying to login a user by email and password.
> If record for the user is found, I simply need to get some user data from
> the User class (works fine) and few properties from an account document
> (doesn't work right) to be stored in user's session.
>
>
> Here is my query:
>
>
> 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]
> <javascript:>', 'abc');
>
> ODocument d = result.get(0);
>
> System.out.println("1 "+ d.field("account.id")); // <-- fails here
> System.out.println("2 "+ d.field("userRid"));
> System.out.println("3 "+ d.field("account.company")); // <-- fails here
> System.out.println("4 "+ d.field("firstName"));
> System.out.println("5 "+ d.field("lastName"));
> System.out.println("6 "+ d.field("account.active")); // <-- fails here
> 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"));
> }
>
>
> It fails to create the SessionUser object. More specifically, it fails on
> retrieval of the account properties. Here is how the data looks in
> 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 <http://account.id> property looks like
> in the debugger*
>
>
> <https://lh3.googleusercontent.com/-YOuTE7s3Nkw/WDyMiR8VZkI/AAAAAAAAAAw/a9h1gGLIq4wmpCHi6rbAjF1DjnfddNhyQCLcB/s1600/Screen%2BShot%2B2016-11-21%2Bat%2B5.48.02%2BPM.png>
>
>
> I do see that the account properties are coming in as objects, just can't
> figure out how to select them easy. I didn't want to go through manually
> casting list then set, etc. to get to a simple account.id element. I'm
> sure there is a straight forward way, just can't see it. For example, if I
> can't use this d.field("account.id") then how do I get the ID 17?
>
>
> What is the right way to select data of a connected document? Or, is there
> a better way to construct the query itself?
>
>
> Thanks.
>
>
--
---
You received this message because you are subscribed to the Google Groups
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.