Thanks Ivan. So simple to just add [0].
As a suggestion to the OrientDB doc writers - it would be nice to have few
cases like these documented in the manual for new users.
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.