Я пытаюсь выполнить простой 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. Я уверен, что есть прямой путь, просто не вижу его.
Каков правильный способ выбора данных подключенного документа? Или, есть ли лучший способ построить сам запрос?
Спасибо.
Вы пытались использовать '' '.getProperty)' '' метод (? –
Можете ли вы привести мне пример о том, как это сделать? – Borov
Просто сделайте '' 'select * от пользователя, где email =? и password =? '' 'и получить от него свойства с помощью метода. –