【问题标题】:How to make db handle auto insert sequence id postgesql如何使 db 处理自动插入序列 id postgresql
【发布时间】:2019-05-01 12:04:53
【问题描述】:

我有一个存在的实体(TableEntity.java),表存在于数据库中,数据也存在 这是 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() 时工作​​正常,但是当我使用它(我可以说它是本机查询吗?)查询时,会出现该异常。如何解决这个问题?或任何参考来解决这个问题?

【问题讨论】:

  • 您在寻找id integer default nextval('table_name_id_seq')吗?
  • @a_horse_with_no_name 简而言之,我想让 db 自己处理为 id 列创建 id 值,但仍然使用序列。所以,我不必在上面的字符串查询中提及“id”列

标签: java postgresql spring-boot nativequery


【解决方案1】:

为列设置默认值:

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

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

【讨论】:

  • Alrite,我先试试。但是,实际上这是另一个问题。如果我想创建一个新实体,如何将默认值设置为上面查询的序列的 nextval?我的意思是,如何在 TableEntity.java 中设置它@a_horse_with_no_name
  • @Akza:抱歉,不知道。我不使用 JPA 或 Hibernate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-20
  • 1970-01-01
  • 2014-08-10
  • 2020-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多