Domanda

Al momento sto lavorando con il database degli oggetti versante (usando JVI), e hanno un caso in cui ho bisogno di interrogare il database in base a un id oggetto.

Il problema è che sto correndo alcuni test di performance sul database utilizzando il framework pole position, e uno dei test in tale contesto mi obbliga a prendere un oggetto dal database utilizzando un riferimento a un oggetto o un oggetto di id basso livello . Quindi, io non sono autorizzato a fare riferimento ai campi specifici nell'oggetto dipendente, ma deve eseguire la query sull'oggetto nella sua interezza. Quindi, non è permesso a me di andare "select * from Employee e dove e.id = 4", ho bisogno di usare l'intero oggetto.

Quello che sto cercando di realizzare è qualcosa sulla falsariga di

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

Tuttavia, questo genera un errore EVJ_NOT_A_VALID_KEY_TYPE. Qualcuno sa il modo corretto di fare questo?

È stato utile?

Soluzione

Certo si capito questo (messaggio è stato mesi fa). Che cosa si vuole fare è utilizzare il GetObjectId prima, per ottenere il VOD Id dell'oggetto, quindi interrogare il DB;

id = session.GetObjectId (dipendente);

Altri suggerimenti

Questo è come ho fatto l'intero oggetto di andata e ritorno → → OID oggetto:

In primo luogo si ottiene l'OID con TransSession.getOidAsLong.

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

Una volta ottenuto l'ID oggetto, basta afferrare l'oggetto dalla sua Handle.

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

Non VQL necessario.

Di solito le chiavi sono numeri interi e non stringhe. Si sta creando un dipendente che usa solo il suo nome, forse il corretto identificativo per l'uso è il suo employeeId. Ho bisogno di qualche informazione in più sul tavolo per sapere con certezza.

Si può provare questo,

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

Si restituirà tutti i dipendenti con il nome "Mr. Pickles", quindi ciclo attraverso di loro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top