【发布时间】:2018-09-14 09:21:12
【问题描述】:
我遇到了一些问题:我需要在 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;
这适用于甲骨文。我看过很多问题,但大多数使用的是 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>
也许,这会导致一些问题?
提前致谢
【问题讨论】:
-
这听起来可能很愚蠢,但是你的数据库中有这个序列
FOO_SEQ吗? -
是的,我的应用程序使用的数据库模式中有序列
-
如果您仍处于可以在数据库中进行调整的阶段,我建议您使用
serial字段并让 postgres 处理其余部分。
标签: java postgresql hibernate sequence