2017-01-02 46 views
1

我在我的Spring Web應用程序中使用Hibernate Framework和PostgreSQL數據庫。我有一個名爲agent_id_seq例如序列,並在beggining我改變由休眠和PostgreSQL - 序列開始於-46

alter sequence agent_id_seq 
minvalue 1 
start with 1; 

我加入使用Hibernate記錄,直到我使用Hibernate刪除記錄,並使用Hibernate添加另一條記錄一切正常,這個序列。它使我的序列以-46的值開始!如何解決這個問題?

我的代理模型

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

回答

3

如果你創建PostgreSQL的序列,而不是冬眠,它以1爲INCREMENT創建,但休眠盲目假設所有序列具有50的INCREMENT除非另行告知。

因此,當它得到值1作爲結果時,它假定這是生成的密鑰(2-49) .. 2的可用範圍中的最後一個值。

要修復它,請在您的映射上指定一個明確的增量,或者在PostgreSQL序列上指定一個增量爲50

我個人認爲這是一個嚴重的Hibernate錯誤。