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.

Reply via email to