用于在Postgresql中递增和ID的序列,不是由hibernate调用的

时间:2016-03-22 15:00:31

标签: java hibernate postgresql

我将序列 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的值递增。

1 个答案:

答案 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