I did, but it doesn't work. It pulls the entire 'account' object. System.out.println("acc rid = "+ d.field("account.@rid")); System.out.println("acc rid = "+ d.field("account"));
acc rid = Account#25:0{...} acc rid = Account#25:0{...} On Thursday, December 1, 2016 at 1:34:04 PM UTC-8, Ivan Mainetti wrote: > > Did you try with one of these? > > d.field("account.@rid") > > d.field("account") > > > > > Il giorno giovedì 1 dicembre 2016 20:36:01 UTC+1, Borov ha scritto: >> >> Hi Ivan, >> >> In my original logic "d" is of type ODocument ( >> http://orientdb.com/javadoc/2.2.x/com/orientechnologies/orient/core/record/impl/ODocument.html) >> >> and it doesn't have .getProperty(...) method. >> >> Can I get the account.@rid from the SQL API and not the Graph API? >> >> >> >> On Wednesday, November 30, 2016 at 3:14:43 PM UTC-8, Ivan Mainetti wrote: >>> >>> 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.