well, getProperty returns something very similar actually
System.out.println("3 " + d.getProperty("account.@rid"));
System.out.println("3 " + d.getProperty("account"));
3 v(Account)[#25:0]
3 v(Account)[#25:0]
But! I've found this!
String query = "select name, in('Employs')[0] as account,
in('Employs')[0].asString() as accRid from user where name = ?";
System.out.println("3 " + d.getProperty("accRid"));
//System.out.println("3 " + d.field("accRid"));
--
3 #25:0
Il giorno venerdì 2 dicembre 2016 04:21:39 UTC+1, Borov ha scritto:
>
> 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('[email protected]',
>>>>>>> '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.