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.
Cara, muito obrigado, depois de um dia inteiro, você salvou minha vida kkkk
Feliz em ter ajudado! Abraço amigo.