Pregunta

Actualmente estoy trabajando con la base de datos de objetos vertiente (usando IMV), y tienen un caso en el que necesito para consultar la base de datos basado en un identificador de objeto.

El problema es que estoy corriendo algunas pruebas de rendimiento en la base de datos utilizando el marco de la pole, y una de las pruebas en ese marco me obliga a buscar un objeto de la base de datos utilizando una referencia de objeto o un objeto de Identificación del bajo nivel . Por lo tanto, no se me permite hacer referencia a campos específicos en el objeto empleado, sino que debe realizar la consulta sobre el objeto en su totalidad. Por lo tanto, no está permitido para que me vaya "SELECT * FROM Empleado e donde e.id = 4", lo necesito para utilizar todo el objeto.

Lo que estoy tratando de lograr es algo a lo largo de las líneas

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

Sin embargo, esto arroja un error EVJ_NOT_A_VALID_KEY_TYPE. ¿Alguien sabe la forma correcta de hacer esto?

¿Fue útil?

Solución

Claro que cuenta de esto (post fue hace meses). Lo que se quiere hacer es utilizar el GetObjectId en primer lugar, para obtener el ID de VOD del objeto, a continuación, consulta la base de datos;

id = session.GetObjectId (empleado);

Otros consejos

Esta es la forma en que lo hice todo el objeto ida y vuelta → → OID objeto:

En primer lugar aparecerá el OID con TransSession.getOidAsLong.

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

Una vez que tenga el ID de objeto, simplemente agarrar el objeto de su Handle.

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

No se VQL necesario.

Por lo general, las claves son números enteros y no cadenas. Está creando un empleado utilizando sólo su nombre, tal vez el identificador correcto a utilizar es el de empleado. Necesito más información sobre la tabla para saber con seguridad.

Puede probar esto,

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

devolverá todos los empleados con el nombre de "Mr. Pickles", a continuación, recorrer ellos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top