Flag "N" Full Scan em Hibernate

1 resposta
M

Pessoal,

Bom dia !!

Estou tentando corrigir um problema em uma aplicação, mas como não tenho experiência em hibernate estou tendo algumas dificuldades.

Para toda query gerada pelo hibernate, ele está colocando a flag “N” no campo chave de busca da query.

Exemplo:

select obj.id as x0_0_, obj2.STR_NOME as x1_0_, obj.STR_COD as x2_0_, obj3.STR_NUMERO_CARTAO as x3_0_, obj.OID_BENEFICIARIO as x4_0_ from BENEFICIARIO obj, USUARIO obj2, CARTAO obj3 where 
(obj.OID_USUARIO=obj2.OID_USUARIO )and
(obj.OID_BENEFICIARIO=obj3.OID_BENEFICIARIO )and(obj2.STR_NOME
 like N'MARCIO%' )and(obj.DATA_CANCELAMENTO_SISTEMA is null )
 order by  obj2.STR_NOME asc

Veja a linha com o código: STR_NOME like N’MARCIO%

O hibernate está deixando de lado o índice da tabela e forçando a query a executar um full scan na busca, sendo assim, a performance do meu banco de dados está indo lá em baixo.

Como removo essa flag ? Isso é alguma configuração incorreta ?

Algum guru do hibernate poderia me ajudar ?

Um grande abraço a todos.

Márcio.

1 Resposta

D

Estou tendo um problema no oracle sobre codificação de caracteres (o banco tem o tipo ISO8859 ou WIN1512, mas a aplicação trabalha com UTF-8) e durante a pesquisa vi algo semelhante ao que você indicou.

Segue o link: http://www.stanford.edu/dept/itss/docs/oracle/10g/server.101/b10749/ch7progrunicode.htm

Procure por: SQL Functions for Unicode Datatypes

Segue um pequeno trecho (veja o exemplo 7.1):
SQL NCHAR datatypes can be converted to and from SQL CHAR datatypes and other datatypes using explicit conversion functions. The examples in this section use the table created by the following statement:

CREATE TABLE customers
(id NUMBER, name NVARCHAR2(50), address NVARCHAR2(200), birthdate DATE);

Example 7-1 Populating the Customer Table Using the TO_NCHAR Function

The TO_NCHAR function converts the data at run time, while the N function converts the data at compilation time.

INSERT INTO customers VALUES (1000,
TO_NCHAR(‘John Smith’),N’500 Oracle Parkway’,sysdate);

Pelo que entendi o uso da função N é para utilizar com caracteres unicode. Talvez por isso o Hibernate coloca esta função e isso causa o full scan.

Espero ter ajudado,

[]'s

Daniel Augusto

Criado 20 de novembro de 2006
Ultima resposta 20 de nov. de 2006
Respostas 1
Participantes 2