using getProperty, like in my example code, you can do System.out.println("3 " + d.getProperty("account.@rid"));
I don't know if it works even with *field()* method Il giorno mercoledì 30 novembre 2016 23:28:26 UTC+1, Borov ha scritto: > > One more question, > > What is the way to get account @rid from this field "in('Employs')[0] as > account"? I can get all fields, but not the @rid. > > > > On Monday, November 28, 2016 at 2:42:13 PM UTC-8, Ivan Mainetti wrote: >> >> 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 = ?";* >> >> *EDIT* >> >> Alternatively you can change a little your code as follow (I've simplified >> the query just for testing): >> >> String dbName = "stack40732762"; >> >> OrientGraphFactory dbfactory = new >> OrientGraphFactory("remote:127.0.0.1:2424/"+dbName, "root", >> "root").setupPool(1, 50); >> >> OrientGraph db = dbfactory.getTx(); >> // ODatabaseDocumentTx db = DbPool.getConnection() >> >> try { >> String query = "select name, in('Employs')[0] as account >> from user where name = ?"; >> // >> // OSQLSynchQuery<ODocument> query = new >> OSQLSynchQuery<>(sql); >> // List<ODocument> result = db.command(query).execute(); >> Iterable<OrientVertex> result = db.command(new >> OCommandSQL(query)).execute("pippo"); >> >> while(result.iterator().hasNext()){ >> OrientVertex d = result.iterator().next(); >> >> // System.out.println("1 "+ >> d.field("account.id")); // <-- fails here >> System.out.println("1 " + >> d.getProperty("account.id")); // <-- this works! >> // System.out.println("2 "+ >> d.field("name")); >> System.out.println("2 " + >> d.getProperty("name")); >> } >> >> >> } catch (Exception e) { >> // TODO: handle exception >> System.out.println(e); >> } >> >> >> 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('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 <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 orient-database+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.