![](/img/trans.png)
[英]How does increment_by of a PostgreSQL sequence work with the allocationSize of Hibernate?
[英]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.