【发布时间】:2015-05-07 16:58:34
【问题描述】:
我有一个带有自动递增主键和唯一键的表:
CREATE TABLE `product` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`canonical_url` varchar(750) CHARACTER SET latin1 NOT NULL,
...
PRIMARY KEY (`id`),
UNIQUE KEY `canonical_url_idx` (`canonical_url`)
如果 canonical_url 已经存在,我会使用 on duplicate key 功能更新记录:
"INSERT INTO product(id, canonical_url, name VALUES(?, ? ?) ON DUPLICATE KEY UPDATE name=VALUES(name), id=LAST_INSERT_ID(id)"
KeyHolder productKeyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(conn -> {
PreparedStatement ps = conn.prepareStatement(productSql, new String[] {"id"});
ps.setInt(1, id);
ps.setString(2, canonicalUrl);
ps.setString(3, name);
}, productKeyHolder);
final int productId = productKeyHolder.getKey().intValue();
问题是我收到了这个错误:
getKey 方法只应在返回单个键时使用。当前键条目包含多个键:[{GENERATED_KEY=594}, {GENERATED_KEY=595}]
有人知道这是什么原因吗?
【问题讨论】:
-
仅供参考,我刚刚使用
spring-boot-2.0.5.RELEASE遇到了同样的问题
标签: mysql spring-jdbc