如何使数据库处理自动插入序列ID postgesql

时间:2018-11-29 12:12:30

标签: java postgresql spring-boot nativequery

我有一个存在的实体(TableEntity.java),该表存在于db中,还有数据 这是TableEntity.java中已经分配的列ID的方式

@Id
@SequenceGenerator(name = "table_name_id_seq", sequenceName = "table_name_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "table_name_id_seq")
@Column(name = "id", nullable = false, updateable = false)
private int id;

在数据库中,我查看表的属性,对于id列,数据类型为int并设置为Not NULL 用于将数据插入db的先前代码仅在执行“ repository.save()” 但是现在,我想使用PreparedStatement将数据每批插入db 这是我创建查询的方式

String query = "INSERT INTO table_name (column1, column2) values (?, ?)";

问题是,执行查询时,它违反了id列的空约束。如何使数据库可以处理我的列ID?因为,当我只使用repository.save()可以正常工作,但是当我使用那个(我可以说它是本机查询吗?)查询时,就会出现该异常。如何解决呢?或解决此问题的任何参考?

1 个答案:

答案 0 :(得分:0)

设置列的默认值:

alter table table_name
   alter column id set default nextval('table_name_id_seq');

现在,如果INSERT语句未为id列提供值(通过不提及),则使用下一个序列值填充该列。