Pergunta

Atualmente estou trabalhando com o banco de dados objeto versant (usando JVI), e tem um caso onde eu preciso para consultar o banco de dados com base em uma ID de objeto.

O problema é que eu estou correndo alguns testes de desempenho no banco de dados usando a estrutura da pole position, e um dos testes em que o quadro me obriga a buscar um objeto a partir do banco de dados usando uma referência de objeto ou um ID de objeto de baixo nível . Assim, eu não tenho permissão para fazer referência a campos específicos no objeto empregado, mas deve executar a consulta sobre o objeto em sua totalidade. Assim, não é permitido para mim ir "SELECT * FROM EMPREGADOS E onde e.id = 4", eu preciso dele para usar o objeto inteiro.

O que eu estou tentando alcançar é algo ao longo das linhas de

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

No entanto, isso gera um erro EVJ_NOT_A_VALID_KEY_TYPE. Alguém sabe a maneira correta de fazer isso?

Foi útil?

Solução

Claro que você descobriu isso (post foi há meses). O que você quer fazer é usar o GetObjectId em primeiro lugar, para obter o VOD Id do objeto, em seguida, consulta o banco de dados;

id = session.GetObjectId (empregado);

Outras dicas

Isto é como eu fiz todo o objeto de ida e volta ? OID ? objeto:

Primeiro você começa a OID com TransSession.getOidAsLong.

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

Uma vez que você tem a identificação do objeto, basta pegar o objeto de seu Handle.

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

No VQL necessário.

Normalmente, as chaves são inteiros e não cordas. Você está criando um funcionário usando apenas seu nome, talvez o identificador correto para usar é o seu employeeId. Eu preciso de mais informações sobre a tabela para saber com certeza.

Você pode tentar isso,

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

Ele irá retornar todos os Colaboradores com o nome "Mr. Pickles", laço Então através deles.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top