Portabilidade entre bancos JPA

Estou desenvolvendo uma aplicação que utiliza JPA com Hibernate. E um requisito deste sistema é permitir a portabilidade entre bancos.

Cenário:

Cliente 1 – Utiliza o banco de dados Firebird;
Cliente 2 – Utiliza o banco de dados Postgres;
Cliente 3 – Utiliza o banco de dados MySql;

O problema inicial ocorria em virtude da geração das chaves primárias. Postgres e FireBird fazem este controle com o uso de sequence, já o MySql utiliza um auto incremento próprio.

Para solucionar esse problema, foi necessário definir a strategy do @GeneratedValue como Auto e acrescentar o @SequenceGenerator. Vejamos o código:

@Entity
public class Usuario implements Serializable{

    private static final long serialVersionUID = 1L;
        
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO, generator="usuario_seq")
    @SequenceGenerator(name = "usuario_seq", sequenceName = "usuario_seq")
    private Long id;    
    private String nome;
}

Realizei um teste de inclusão nos 3 bancos e tive êxito. Caso queiram baixar o código do teste, clique aqui. Aconselho a leitura desse post da TriadWorks onde eles dão 6 dicas de como manter a portabilidade entre bancos com JPA.

2 comments

Deixe uma resposta