【发布时间】:2019-11-16 06:05:45
【问题描述】:
我的插入查询返回插入记录的 UUID。下面是相关代码。
KeyHolder keyHolder = new GeneratedKeyHolder();
template.update(connection -> {
PreparedStatement ps = connection.prepareStatement(insertQuery);
ps.setString(1, stateName);
ps.setString(2, stateAb);
ps.setObject(3, propertyDetailsObject);
return ps;
}, keyHolder);
我正在使用一个以select id from tmpproperty limit 1; 结尾的长 CTE 查询,为了便于阅读,我在此处缩短了内容。
但我得到以下异常
org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback;没有结果时返回 预期的。;嵌套异常是 org.postgresql.util.PSQLException: A 结果在没有预期的情况下返回。
我在网上找到了上面的示例,并希望它能够工作。知道我应该做些什么不同的事情吗?
【问题讨论】:
-
insertQuery 中的查询是什么?为什么更新查询中有“select id ...”?这是您的错误:更新查询不应返回任何值,您在最后执行选择以返回最后一行 id。这不是更新查询的有效方案。
-
您应该使用 INSERT...RETURNING,例如:INSERT INTO people (lastname,firstname) VALUES ('Smith', 'John') RETURNING id;
标签: java spring spring-boot spring-jdbc