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