سؤال

أنا أعمل حاليا مع قاعدة بيانات كائن Versant (باستخدام JVI)، ولديك حالة أحتاج إلى الاستعلام عن قاعدة البيانات بناء على معرف كائن.

المشكلة هي أن أشغل بعض اختبارات الأداء في قاعدة البيانات باستخدام إطار وضع القطب، ويتطلب مني أحد الاختبارات في هذا الإطار جلب كائن من قاعدة البيانات باستخدام مرجع كائن أو معرف كائن منخفض المستوى. وبالتالي، لا يسمح لي بالإشارة إلى حقول محددة في كائن الموظف، ولكن يجب إجراء الاستعلام على الكائن بالكامل. لذلك، ليس مسموحا لي بالذهاب "حدد * من الموظف E حيث E.ID = 4"، أحتاج إليها لاستخدام الكائن بأكمله.

ما أحاول تحقيقه هو شيء على غرار

موظف الموظف = موظف جديد ("السيد. المخللات")؛ session.commit ()؛ FENTVQLQUERY Q = FundVQLQUERY NEW (جلسة "، حدد * من موظف الموظف حيث الموظف = 1 دولار")؛ q.bind (الموظف)؛ q.Execute ()؛

ومع ذلك، هذا يلقي خطأ EVJ_NOT_A_VALID_KEY_TYPE. هل يعرف أحد الطريقة الصحيحة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

من المؤكد أنك أحسب أن هذا خارج (كان منذ أشهر). ما تريد القيام به هو استخدام GetObjectid أولا، للحصول على معرف VOD للكائن، ثم الاستعلام DB؛

معرف = session.getObjectid (الموظف)؛

نصائح أخرى

هذه هي الطريقة التي قمت بها كائن دائري بالكامل → 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.

عادة ما تكون مفاتيح الأعداد الصحيحة وليس سلاسل. أنت تقوم بإنشاء موظف باستخدام اسمه فقط، وربما المعرف الصحيح لاستخدامه هو موظفه. أحتاج إلى مزيد من المعلومات حول الجدول لمعرفة بالتأكيد.

يمكنك تجربة هذا،

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(); 
}

سيعود جميع الموظفين باسم "السيد مخلل"، ثم حلقة من خلالها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top