PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

L'utilisation Hibernate de la séquence PostgreSQL n'affecte pas la table de séquence

J'ai eu le même problème. Il est lié aux stratégies d'allocation d'identifiants d'Hibernate. Lorsque vous choisissez GenerationType.SEQUENCE , Hibernate utilise la stratégie HiLo qui alloue les identifiants par blocs de 50 par défaut. Vous pouvez donc définir explicitement allocationSize valeur comme ceci :

@Id 
@SequenceGenerator(name="pk_sequence",sequenceName="entity_id_seq", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="pk_sequence")
@Column(name="id", unique=true, nullable=false)
public int getId() {
    return this.id;
}

Cependant, j'ai également entendu des opinions selon lesquelles l'utilisation de la stratégie HiLo avec allocationSize=1 n'est pas une bonne pratique. Certaines personnes recommandent d'utiliser GenerationType.AUTO à la place lorsque vous devez gérer des séquences gérées par la base de données

Mise à jour : J'ai fini par utiliser allocationSize=1, et les choses semblent fonctionner comme je m'y attends maintenant. Mon application est telle que je n'ai pas vraiment besoin de blocs d'identifiants de toute façon, donc YMMV.