我遇到了一些问题:我需要在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>
也许,这会引起一些问题吗?
提前致谢
答案 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。解决方案是删除该字段。