我将序列 MAIL_ID_SEQ 添加到Postgresql中的现有表中:
let rec f (i:int) (n:int) (k:int->int) :int
ID存在于复合键MailId:
中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设置为 auto_increment 。
问题是,当从 Hibernate 插入新记录时,ID的值始终为0,但是当我直接从MAIL中的命令行(@Embeddable
public class MailId implements Serializable{
@Column(name = "ID")
private int id;
@Column(name = "YEAR")
private int year;
}
)插入值时表,ID的值递增。
答案 0 :(得分:0)
您需要在id
字段中添加这样的注释:
@SequenceGenerator(name = "mail_id_gen", sequenceName = "MAIL_ID_SEQ", allocationSize = 1)
@GeneratedValue(generator = "mail_id_gen")
每个类的生成器名称必须不同。 allocationSize
是完全可选的,但将其设置为1是针对Hibernate 5.0和5.1中与模式导出不创建的序列相关的错误的解决方法。该错误的另一个解决方法是在hibernate.id.optimizer.pooled.preferred
中将NONE
属性设置为persistence.xml
,如下所示:
<property name="hibernate.id.optimizer.pooled.preferred" value="NONE"/>
如果这还不够,但仍尝试插入0,请将字段类型从int
更改为Integer
,并将其默认设置为null
。