首页 > 解决方案 > 带有 sequence.nexval 的 Spring jdbc 插入语句

问题描述

我正在使用 Spring 和 Postgres,并且正在尝试进行 INSERT。该表approvalsubmission有一个名为 的序列approvalsubmission_ids

所以我尝试使用nextval来填充id列。但我得到一个错误。

问题

我需要如何构建查询?

我有以下查询:

public void updateApprovalSubmission(String corporateTravelRequestUri, String approvalRequestId, byte[] approvalRequestXml, Date requestedDate) {
    String query = "INSERT INTO approvalsubmission(" +
            "id, approvalrequestid, conclusion, conclusionmessage, modifyable, resubmissionof, requesteddate, requested, conclusiondate, approvalrequestxml, escalationlevel) " +
            "VALUES (approvalsubmission_ids.nextval, :approvalrequestid, :conclusion, :conclusionmessage, :modifyable, :resubmissionof, :requesteddate, :requested, :conclusiondate, :approvalrequestxml, :escalationlevel);";
    MapSqlParameterSource parameters = new MapSqlParameterSource();
    parameters.addValue("approvalrequestid", approvalRequestId);
    parameters.addValue("conclusion", null);
    parameters.addValue("conclusionmessage", null);
    parameters.addValue("modifyable", null);
    parameters.addValue("resubmissionof", null);
    parameters.addValue("requesteddate", requestedDate);
    parameters.addValue("requested", corporateTravelRequestUri);
    parameters.addValue("conclusiondate", null);
    parameters.addValue("approvalrequestxml", approvalRequestXml);
    parameters.addValue("escalationlevel", null);

    int noRowsUpdates = namedParameterJdbcTemplate.update(query, parameters);
    logger.info("updateApprovalSubmission: "+noRowsUpdates+" row updated for corporateTravelRequestUri: "+corporateTravelRequestUri+" and approvalRequestId: "+approvalRequestId);
}

它会产生以下错误:

org.postgresql.util.PSQLException:错误:缺少表“approvalsubmission_ids”的 FROM 子句条目

标签: javaspringspring-jdbc

解决方案


另一种选择是id使用 PostgreSQL 类型serial或子类型: smallserialbigserial)创建这些列。

https://www.postgresql.org/docs/9.5/datatype-numeric.html#DATATYPE-SERIAL

这样,您无需在insert语句中指定列id或其“相关值”,因为数据库将为您管理。


推荐阅读