Mapeamento com Annotations e mudando banco de dados

5 respostas
aeugenio

Caros,

Alguem pode me apontar um caminho ? Estou desenvolvendo uma aplicacao que deve rodar em qualquer banco. Hoje estou usando o oracle, mysql, h2 e sql server como testes.

Estou fazendo todo o mapeamento de classe utilizando anotacoes como ja disse acima. Como cada banco tem suas propriedades distintas para o tratamento de gerar um campo id (por exemplo oracle usa sequence, mysql usa auto_increment, etc), como faco para o mapeamento ser “inteligente” ?

Não queria ter que ter um codigo ajustado pra cada banco. Estou perdendo algo obvio ?

Eu sei que posso usar o proprio hibernate pra gerar a chave fazendo pool, etc - mas nao acho que esse seja o melhor caminho pq fica complicado manter a integridade qdo se necessita fazer inclusoes manuais - eu gostaria de usar o esquema nativo da base.

vlw.

5 Respostas

peerless

Como assim?

jgbt

Se vc usar GenerationType.IDENTITY vai ser usado o mecanismo padrao do banco de dados.
por exemplo, se for MySql o campo sera criado com auto-increment, se for Oracle/Postgres sera criada um sequece e por ae vai.
Faça um teste e veja o resultado

[]´s

aeugenio

Como assim?
DA uma olhada aqui http://www.hibernate.org/hib_docs/v3/reference/en-US/html/mapping.html#mapping-declaration-id-generator vc vai ver que o hibernate tem varias formas de gerar a chave inclusive com algoritimo proprio tirando essa funcao do banco.

jgbt:

Se vc usar GenerationType.IDENTITY vai ser usado o mecanismo padrao do banco de dados.
por exemplo, se for MySql o campo sera criado com auto-increment, se for Oracle/Postgres sera criada um sequece e por ae vai.
Faça um teste e veja o resultado

[]´s

Vou ser sincero que ja fiz alguns testes superficiais e nao funcionou com o esquema de trigger + sequence do oracle dando que precisei usar o tipo .SEQUENCE (como vc pode ver no link que postei acima). Mas vou tentar mais um pouco pra ver se comi bola.

Obrigado mesmo assim - e se algum puder acrescentar algo eu agradeco.

/peace

aeugenio

Nao consigo fazer a sequence do oracle funcionar com GenerationType.IDENTITY, alguem conseguiu fazer isso?

Volto a estaca zero, o codigo hibernate pro oracle precisa ser diferente do resto dos outros bancos :frowning:

/peace

jgbt

aeugenio:
Nao consigo fazer a sequence do oracle funcionar com GenerationType.IDENTITY, alguem conseguiu fazer isso?

Volto a estaca zero, o codigo hibernate pro oracle precisa ser diferente do resto dos outros bancos :frowning:

/peace

bom,
não sei se eu entendi o teste que vc fez, mas se vc usar o GenerationType.IDENTITY, o hibernate vai usar o mecanismo padrao do banco. Ou seja, se for oracle ele mesmo vai criar uma sequence p/ isso. se vc deseja usar um sequence que ja existe,dae vc vai ter que usar GenerationType.SEQUENCE e indicar qual sequence vai ser usada.

é isso que vc esta fazendo?

[]´s

Criado 12 de novembro de 2008
Ultima resposta 13 de nov. de 2008
Respostas 5
Participantes 3