namedParameterJdbcTemplate 更新返回 1 但数据未添加到数据库 POSTGRES SPRING-JDBC

问题描述 投票:0回答:2

我是后端开发新手,目前我面临着使用namedParameterJdbcTemplate从Spring DAO服务将数据添加到我的postgres数据库的问题。

public int addCompany(CompanyDto companyDto) throws DataAccessException {
        MapSqlParameterSource namedParams = new MapSqlParameterSource();
        namedParams.addValue("name", companyDto.getName());

        return namedParameterJdbcTemplate.update(
            CompanyQueries.ADD_COMPANY,
            namedParams
    );
}
public class CompanyQueries {
    public static final String ADD_COMPANY = "INSERT INTO company (name) values (:name);";
}

但是当我调用端点并调用 addCompany() 中的更新时,它返回 1 ,表 id 的序列递增,数据库日志中根本没有错误,我在 postgresql.conf 中打开了 csvlogs。

通过namedParameterJdbcTemplate进行的选择工作正确。

Postgres 版本 15 爪哇17 春季 6 弹簧靴 3

当我在 datagrip 控制台中运行查询时,会添加行。

java spring postgresql spring-boot spring-jdbc
2个回答
0
投票

发生这种情况是因为事务最终没有提交。 我是如何找到解决方案的。

  1. 在spring的application.yml中将日志级别放入debug。
  2. 看到一条消息,指出事务由于脏状态而正在回滚。
  3. 发现我已经在 application.yml 中使用 auto-commit=false 复制了数据源配置。

0
投票

你可以尝试@Transactional

@Transactional(rollbackFor = Exception.class)
public int addCompany(CompanyDto companyDto) throws DataAccessException{
    MapSqlParameterSource namedParams = new MapSqlParameterSource();
    namedParams.addValue("name", companyDto.getName());

    return namedParameterJdbcTemplate.update(
        CompanyQueries.ADD_COMPANY,
        namedParams
    );
}

我认为它有效

© www.soinside.com 2019 - 2024. All rights reserved.