2016-11-22 2 views
1

Я пытаюсь выполнить простой SQL-запрос для извлечения данных из найденного документа и нескольких свойств связанного документа. Но по какой-то причине столкнулся с мертвой стеной о том, как выбрать свойство из подключенного документа. Вот мой простой сценарий:OrientDB: невозможно выбрать данные из подключенного документа

У меня есть 2 документа, учетная запись и пользователь. Документ учетной записи имеет преимущество перед пользователем с именем «Служащие». Я пытаюсь войти в систему по электронной почте и паролю. Если запись для пользователя найдена, мне просто нужно получить некоторые пользовательские данные и несколько свойств из документа учетной записи, который будет храниться в сеансе пользователя.

Вот мой запрос:

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")); 
    System.out.println("2 "+ d.field("userRid")); 
    System.out.println("3 "+ d.field("account.company")); 
    System.out.println("4 "+ d.field("firstName")); 
    System.out.println("5 "+ d.field("lastName")); 
    System.out.println("6 "+ d.field("account.active")); 
    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")); 
} 

Это не создает объект SessionUser. Более конкретно, он не удается найти свойства учетной записи. Вот как выглядит данные в 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 property looks like in the debugger

Я вижу, что свойства учетной записи поступают в качестве объектов, просто не могу понять, как выбрать их легко. Я не хотел проходить через список ручного литья, а затем устанавливать и т. Д., Чтобы перейти к простому элементу account.id. Я уверен, что есть прямой путь, просто не вижу его.

Каков правильный способ выбора данных подключенного документа? Или, есть ли лучший способ построить сам запрос?

Спасибо.

+0

Вы пытались использовать '' '.getProperty)' '' метод (? –

+0

Можете ли вы привести мне пример о том, как это сделать? – Borov

+0

Просто сделайте '' 'select * от пользователя, где email =? и password =? '' 'и получить от него свойства с помощью метода. –

ответ

Смежные вопросы