HIbernate不使用PostgreSQL的序列

时间:2018-04-04 17:47:34

标签: java postgresql hibernate sequence

我遇到了一些问题:我需要在PostgreSQL中使用序列来生成id。但是当我在表中保存新对象时,它表示id为null

org.postgresql.util.PSQLException: ERROR: null value in column "id" violates not-null constraint

我使用这些注释:

    @SequenceGenerator(name = "fooGen", sequenceName = "FOO_SEQ",   allocationSize = 1)
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "fooGen")
    @Column(columnDefinition = "numeric")
    private BigInteger id;

这对Oracle有用。我已经看了很多问题,但大多数都使用了GenerationType.AUTO或GenerationType.IDENTITY,解决方案是使用GenerationType.SEQUENCE。但我已经在使用它了。

尝试使用存储库方法

保存实体时出现此异常
fooRepository.saveAndFlush(entity);

我的数据库是PostgreSQL 9.6.1。 我用

org.hibernate.dialect.PostgreSQL9Dialect

序列存在,我查了一下。而hibernate.hbm2ddl.auto = validate如果不存在则会给我例外。

请帮助我,我在哪里弄错了?

我正在使用数据库架构:

<prop key="hibernate.default_schema">${jdbc.postgresql.schema}</prop>
也许,这会引起一些问题吗?

提前致谢

2 个答案:

答案 0 :(得分:0)

尝试将ID的类型更改为Long,如

   @SequenceGenerator(name = "fooGen", sequenceName = "FOO_SEQ",   allocationSize = 1)
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "fooGen")
    @Column(columnDefinition = "numeric")
    private Long id;

答案 1 :(得分:0)

此表具有多对多关系,并且连接两个实体的表具有其自己的id字段。 Hibernate没有为此表映射的Java类,也没有设置此ID。解决方案是删除该字段。