2017-01-02 3 views
1

Ich verwende Hibernate Framework und PostgreSQL-Datenbank in meiner Spring Web-Anwendung. Ich habe zum Beispiel Sequenz namens agent_id_seq und sich am Anfang ändern ich diese Sequenz vonHibernate und PostgreSQL - Sequenz beginnt mit -46

alter sequence agent_id_seq 
minvalue 1 
start with 1; 

I Aufzeichnungen bin Zugabe mit Hibernate und alles funktioniert gut, bis ich Rekord Hibernate entfernen und einen anderen Datensatz mit Hibernate hinzufügen. Es lässt meine Sequenz mit -46 beginnen! Wie behebe ich das?

My Agent Modell

@Entity 
@Table(name = "agent") 
public class Agent { 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "agent_seq_gen") 
    @SequenceGenerator(name = "agent_seq_gen", sequenceName = "agent_id_seq") 
    @Column(name = "id") 
    private long id; 

Antwort

3

Wenn Sie eine Folge von PostgreSQL erstellen, nicht Hibernate, ist es mit einem INCREMENT von 1. erstellt Aber Hibernate geht davon blind alle Sequenzen eine INCREMENT von 50 haben, wenn nichts anderes gesagt.

Wenn also der Wert 1 als Ergebnis erhalten wird, wird angenommen, dass dies der letzte Wert im verwendbaren Bereich der generierten Schlüssel (2-49) .. 2 ist.

Um dies zu beheben, geben Sie ein explizites Inkrement für Ihr Mapping an, oder ALTER das Inkrement für die PostgreSQL-Sequenz zu 50.

Ich halte dies für eine ernsthafte Hibernate Bug, persönlich.

Verwandte Themen