簡體   English   中英

休眠不調用的Postgresql中用於遞增和ID的序列

[英]Sequence used to increment and ID in Postgresql not called by hibernate

我在Postgresql的現有表中添加了一個序列MAIL_ID_SEQ

CREATE SEQUENCE MAIL_ID_SEQ START WITH 1;
alter table MAIL alter column ID set default nextval('MAIL_ID_SEQ'::regclass);
alter SEQUENCE MAIL_ID_SEQ owned by MAIL.ID;

該ID存在於復合鍵MailId中:

@Embeddable
public class MailId implements Serializable{
  @Column(name = "ID")
  private int id;

  @Column(name = "YEAR")
  private int year;
}

我希望ID使用我創建的順序為auto_increment 問題是,當通過Hibernate插入新記錄時,ID的值始終為0,但是當我直接從命令行( inset into MAIL .. )在MAIL表中插入值時,ID的值增加。

您需要在id字段中添加這樣的注釋:

    @SequenceGenerator(name = "mail_id_gen", sequenceName = "MAIL_ID_SEQ", allocationSize = 1)
    @GeneratedValue(generator = "mail_id_gen")

每個類的生成器名稱都必須不同。 allocationSize完全是可選的,但將其設置為1可以解決與模式導出未創建的序列有關的Hibernate 5.0和5.1中的錯誤。 該錯誤的另一種解決方法是,在persistence.xml中將hibernate.id.optimizer.pooled.preferred屬性設置為NONE ,如下所示:

<property name="hibernate.id.optimizer.pooled.preferred" value="NONE"/>

如果這還不夠,並且仍嘗試插入0,請將字段類型從int更改為Integer並將其默認null保留為null

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM