Вопрос

В настоящее время я работаю с базой данных объектов versant (используя jvi), и у меня есть случай, когда мне нужно запросить базу данных на основе идентификатора объекта.

Проблема в том, что я запускаю некоторые тесты производительности базы данных с использованием платформы pole position, и один из тестов в этой платформе требует, чтобы я извлек объект из базы данных, используя либо ссылку на объект, либо идентификатор объекта низкого уровня.Таким образом, мне не разрешено ссылаться на определенные поля в объекте employee, но я должен выполнить запрос к объекту полностью.Итак, мне не разрешено переходить "выбрать * из Employee e, где e.id = 4", мне это нужно, чтобы использовать весь объект.

То, чего я пытаюсь достичь, - это что-то вроде

Employee employee = new Employee("Mr. Pickles");
session.commit();

FundVQLQuery q = new FundVQLQuery(session, 
                 "select * from Employee employee where employee = $1");
q.bind(employee);
q.execute();

Однако это приводит к ошибке EVJ_NOT_A_VALID_KEY_TYPE.Кто-нибудь знает правильный способ сделать это?

Это было полезно?

Решение

Уверен, вы поняли это (сообщение было несколько месяцев назад).Что вы хотите сделать, это сначала использовать GetObjectId, чтобы получить идентификатор VOD объекта, а затем запросить базу данных;

id = сессия.GetObjectId (сотрудник);

Другие советы

Вот как я проделал весь путь туда и обратно object → OID → объект:

Сначала вы получаете OID с помощью TransSession.getOidAsLong.

TransSession session = ...;
Employee employee = new Employee("Mr. Pickles");
long oid = TransSession.getOidAsLong(employee);
session.commit();

Как только у вас будет идентификатор объекта, просто возьмите объект из его Handle.

TransSession session = ...;
Employee employee = (Employee)session.returnHandleFromLong(oid).handleToObject();

VQL не требуется.

Обычно ключи представляют собой целые числа, а не строки.Вы создаете Сотрудника, используя только его имя, возможно, правильным идентификатором для использования является его EmployeeID.Мне нужно еще немного информации на столе, чтобы знать наверняка.

Вы можете попробовать это,

FundVQLQuery vql = FundVQLQuery (session, 
   "select selfoid from Employee where name = $1"); 
vql.bind ("Mr. Pickles");
HandleEnumeration e = vql.execute (); 
while ( e.hasmoreHandles() ) {
    Handle handle = e.nexthandle(); 
}

Это вернет всех Сотрудников с именем "Mr .Соленые огурцы", Затем переберите их петлей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top