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.