PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

L'uso in sospensione della sequenza PostgreSQL non influisce sulla tabella delle sequenze

Ho avuto lo stesso problema. È correlato alle strategie di allocazione dell'ID di Hibernate. Quando scegli GenerationType.SEQUENCE , Hibernate utilizza la strategia HiLo che alloca gli ID in blocchi di 50 per impostazione predefinita. Quindi puoi impostare esplicitamente allocationSize valore come questo:

@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;
}

Tuttavia, ho anche sentito opinioni sull'utilizzo della strategia HiLo con allocationSize=1 non è una buona pratica. Alcune persone consigliano di utilizzare GenerationType.AUTO invece quando hai a che fare con sequenze gestite da database

Aggiornamento: Ho finito per andare con allocationSize=1 e le cose sembrano funzionare come mi aspetto ora. La mia applicazione è tale che comunque non ho davvero bisogno di blocchi di ID, quindi YMMV.