Uso do RowId Oracle 10 para JPA 2.0 com Hibernate 3.X [RESOLVIDO]

Pessoal,

Estou a horas pesquisando e não consigo achar algo sobre o assunto.
Gostaria de saber se é o JPA suporta o RowId, pois tenho uma query que exige performance e utilizaram RowId em proc.
Como estou rescrevendo a query para JPql queria saber se há possibilidade de fazer.

RowID é específico deste DBMS. Não é suportado pela especificação.

Você usaria o rowid para qual finalidade?

Me disseram que utilizando o RowId a pesquisa fica mais rápida… Realmente fica bem mais rápida usando este recurso.
A query irá trazer mais de 1.000.000 de registros e por isso vou utiliza-lo.

Mas usar o rowid para que? para paginar os resultados? “where rowid <= 50”, etc?

A query traria o o rowid … dessa forma…

" rowid from Entity e where e.atributo > 10"

O resultado eu usaria para outros fins…

Pelo que li por aí, você pode mapear a coluna rowid sem problemas…
Apenas tome cuidado de parametriza-la como nao atualizável e inserível.

Ela pode ser mapeada como uma String

@Column(name="ROWID", updatable=false, insertable=false)
private String rowId;

Faça um teste!

Mas este campo não precisa estar na tabela?

Quando eu inicio o servidor ele ocorre esta exception:

Caused by: org.hibernate.HibernateException: Missing column: ROWID in SYSSMS.TB_PAV_AVISO_VIAGEM

E no caso query que eu estou analisando não tem o ROWID … esse campo é pode ser gerado na hora que query é acionada.

Ele precisa constar no resultset quando requisitado.

Mas estou usando JPA… Ela lista o resultado por getListResult do objeto TypeQuery…

Sim… Sem problemas… Você terá este Objeto mapeado em sua entidade. Quando der um getResultlist, ele vai gerar uma query, solicitando o rowid, e vai mapear na propriedade da entidade, como uma coluna qualquer… A diferença é que essa coluna nao deve ser usada em isnerts nem updates… por isso a config.

Prezados,

Agradeço os conselhos e ajuda prestada. Como é algo que exige um performace do banco, acabou sendo decidido que o melhor a fazer é um procedure, como a empresa utiliza o Oracle dificilmente o SGBD será trocado.

Como existem aplicações que utilizam esse recurso e é garantia de sucesso. Eu não arrisquei utilizar o hint do hibernate e um campo físico para essa solução.

Att,

RODOX