Java HIbernate不为PostgreSQL使用序列
我遇到了一些问题:我需要在PostgreSQL中使用序列来生成ID。但当我在表中保存新对象时,它会说id为nullJava HIbernate不为PostgreSQL使用序列,java,postgresql,hibernate,sequence,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 =
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。但我已经在用了
我在尝试使用repository方法保存实体时遇到此异常
fooRepository.saveAndFlush(entity);
我的数据库是PostgreSQL 9.6.1。
我用
序列存在,我检查过了。并且hibernate.hbm2ddl.auto=validate会给我异常,如果它不存在的话
求求你,帮帮我,我哪里出错了
我正在使用数据库架构:
<prop key="hibernate.default_schema">${jdbc.postgresql.schema}</prop>
${jdbc.postgresql.schema}
也许,这会引起一些问题
提前感谢尝试将id的类型更改为
Long
like
@SequenceGenerator(name = "fooGen", sequenceName = "FOO_SEQ", allocationSize = 1)
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "fooGen")
@Column(columnDefinition = "numeric")
private Long id;
此表具有多对多关系,连接两个实体的表具有自己的id字段。Hibernate没有为此表映射Java类,也没有设置此id。解决方案是删除此字段。这听起来可能很愚蠢,但您的数据库中是否有此seq
FOO_seq
?是的,我的应用程序使用了数据库模式中的序列。如果您仍处于可以在数据库中调整的阶段,我建议您使用serial
字段,让postgres处理其余部分。可以肯定的是,所有注释都是从“javax.persistence”包导入的,对吗?是的,但我编写了一些简单的代码来创建实体。它毫无例外地发挥了作用。所以,其他地方一定有错误,谢谢你的帮助)
@SequenceGenerator(name = "fooGen", sequenceName = "FOO_SEQ", allocationSize = 1)
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "fooGen")
@Column(columnDefinition = "numeric")
private Long id;