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('t...@test.com', '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 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 orient-database+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to