6
respostas

Anotação @GeneratedValue para vários SGBD´s

Caros,

Tenho uma dúvida relacionada à anotação @GeneratedValue strategy = GenerationType... Qual a melhor forma de configurar para o perfeito funcionamento em diversos SGBD?Visto que alguns bancos não possuem auto increment, e alguns não possuem sequence.

Grato!

6 respostas

Oi Humberto tudo bom?

Geralmente não precisamos persistir a mesma entidade em Bancos diferentes, por isso acabamos mantendo somente daquele que será utilizado.

Outro ponto é que não tem um suporte automático do Hibernate que deixe sua aplicação totalmente portável entre SGBDs.

Uma alternativa se você realmente precisar é criar um gerador customizado utilizando as anotações:

@GenericGenerator(name = "aliasParaOGerador", strategy = "pacote.nomeDaClasseResponsavelPelaGeracao")
@GeneratedValue(generator = "aliasParaOGerador")

A classe que você criar deve implementar a interface IdentifierGenerator.

Abraço!

Oi Joviane, estou bem e vc?

Meu caso é o seguinte: Tenho uma aplicação que trabalha tanto em Oracle quanto em SQLServer, e em versões mais antigas do Hibernate para funcionar nos distintos banco sem configuração adicional eu utilizava o código abaixo e funcionava perfeitamente, porém ao atualizar parou de funcionar.

    @Id
    @SequenceGenerator(name = "SEQ_CAUsuarioGrupo", sequenceName = "SEQ_CAUsuarioGrupo", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_CAUsuarioGrupo")
    @Column(name = "idCAUsuarioGrupo")
    private long id;

Oi Humberto,

Qual erro passou a acontecer ao atualizar a versão?

Quando utilizo essa configuração, no Oracle ele gera o seguinte comando: Hibernate: select hibernate_sequence.nextval from dual

Como não existe essa sequence, dá pau!

Humberto,

Tem algum id sem um generator definido?

Algo só com a anotação @GeneratedValue(strategy = GenerationType.AUTO) ou @GeneratedValue?

Abraço!

Nâo, todos estão com a configuração como mencionada acima.