Eu de novo com alguns pequenas dúvidas no hibernate.
Qual seria a melhor classe para se gerar identificador único,
não importando qual base de dados usar???
Estou tentando usar o native, mas não estou conseguindo.
Talvez porque eu não tenha achado nenhum exemplo deste.
Intão, eu tbm acho que usar native fica melhor, mais portável,
mas quando eu o uso, ele inicia com “zero” e o próximo
q eu insiro também usa este valor. (Exception a vista)
Estou usando o Hibernate 2.0.2 e oracle.
Tenho até uma sequência para a tabela,
(usei o generator sequence, mas menos portável)
Talvez nem precise usar a sequencia
e o próprio generator (native) gera o valor apropriado.
Hummm, fique atento para o arquivo DTD (valida o seu XML) pois não está sendo utilizado o arquivo para a versão 2.0. Não sei o nome do sequence que vc está utilizando, vou simplesmente chama-la de MINHA_SEQ e depois vc substitue. A Sequence é necessária para que o Hibernate funcione corretamente (Se for, por exemplo um banco MySQL, o Hibernate iria ignorar a TAG do sequence), e criei uma coluna chamada ID que representa minha Primary Key no Oracle.
Bom, no seu exemplo vc usa native, mas tbm usa sequence (Oracle).
No caso se o cliente resolver mudar de SGDB, por exemplo o
SQL Plus, como ficaria para permitir vários tipos de incremnentos
de vários bancos diferentes???
Se o Cliente mudar, por exemplo para o MySQL, o mesmo não possue o conceito de “sequences”, mas sim, com campos auto-incremento. O Hibernate “sabe” que você está utilizando o MySQL, e ira ignorar a TAG onde você aponta o nome de sua sequence.
Outro exemplo seria o banco Firebird (Fork do Interbase 6.0), ele utiliza o mesmo conceito do Oracle, mas com diferenças na sintaxe, o Hibernate “sabe” que está sendo utilizando o Firebird e ele tratara as diferenças. Segue exemplo de como o Firebird/Interbase gera incrementos:
Para criar um generator(o mesmo que sequence do oracle):
CREATE GENERATOR MINHA_SEQ;
para se gerar e obter um incremento:
SELECT GEN_ID(MINHA_SEQ,1) FROM RDB$DATABASE;