como faço para garantir a sequencia do id com mysql e hibernate
No caso vc ta falando que o ID seja auto_increment né? Se sim. É assim no Mysql:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "contato_id")
public Integer getId() {
return this.id.get();
}
mesmo com essa estratégia o mysql “pula” a sequencia, quando um registro não é inserido o valor do id quebra a sequencia, eu sei que isso é um comportamento padrão do mysql, mas gostaria de saber se existe uma forma de garantir essa sequencia.
Como assim mano? quando um registro não é inserido?
Se vc já tinha uma tabela pronta antes de usar o IDENTITY provavelmente vc vai ter q apagar ela e deixar o Hibernate criar novamente tudo, tive q fazer isso para tudo ser sempre na sequência
por exemplo você faz um insert manual no mysql com a PK auto incremento, o primeiro registro será 1, caso você tente inserir outro registro e por qualquer motivo falhe, quando você for fazer o insert novamente o id do registro não será 2 e sim 3. queria encontrar um forma com o hibernate para não permitir que isso ocorra.
Auto incremento é para garantir que um número não se repita em aplicações transacionais, por isso em caso de exceções o número será descartado para garantir que sempre terá sucesso na hora de usar para a gravação. Para ter isso que você deseja, pode fazer um select max em cima de um campo que seja unique key, mas devido concorrência, mais de um usuário pode pegar o mesmo número, então terá que tratar o erro de unique key e repetir o processo para o usuário pegar um próximo número que não tenha sido gravado. Agora, ficar trabalhando com Hibernate vai ter que ficar procurando como se faz pra configurar essas coisas fora da maioria das receitas de bolo. Já via Sql diretamente não tem mistério, é só fazer o que te falei, se preocupando só em programar.