Frage

Im Moment arbeite ich mit der versant Objektdatenbank (JVI verwenden), und einen Fall, wo ich die Datenbank auf einem Objekt-ID auf Basis abfragen muß.

Das Problem ist, ich bin auf der Datenbank einige Performance-Tests laufen die Pole-Position-Framework und einer der Tests in diesem Rahmen erfordert mir ein Objekt aus der Datenbank zu holen entweder einen Objektverweis oder ein niedriges Niveau Objekt-ID . So, ich bin nicht zu referenzieren bestimmten Feldern in den Mitarbeitern Objekt erlaubt, muß aber die Abfrage auf dem Objekt in seiner Gesamtheit durchzuführen. Also, es ist nicht für mich erlaubt zu gehen „select * from Mitarbeiter e wo e.id = 4“, ich brauche es das gesamte Objekt zu verwenden.

Was ich versuche zu erreichen ist etwas entlang der Linien von

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

Dies ist jedoch wirft einen EVJ_NOT_A_VALID_KEY_TYPE Fehler. Kennt jemand die richtige Art und Weise, dies zu tun?

War es hilfreich?

Lösung

Sicher dachten Sie diese aus (post Monaten vor). Was Sie tun möchten, ist die GetObjectId verwenden erste, die VOD-Id des Objekts zu erhalten, dann die DB-Abfrage;

id = session.GetObjectId (Mitarbeiter);

Andere Tipps

Dies ist, wie ich das ganze Hin- und Rück Objekt hat → OID → Objekt:

Zuerst die OID mit TransSession.getOidAsLong erhalten.

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

Wenn Sie die Objekt-ID haben, greift nur das Objekt von seiner Handle.

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

Nein VQL benötigt.

sind in der Regel Tasten ganze Zahlen und keine Strings. Sie erstellen einen Mitarbeiter nur seinen Namen, vielleicht die richtige Kennung zu verwenden ist seine employeeId. Ich brauche mehr Informationen auf dem Tisch, um sicher zu wissen.

Sie können dies versuchen,

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

Es werden alle Mitarbeiter Rückkehr mit dem Namen „Mr. Pickles“, dann die Schleife durch sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top