我正在使用spring jdbctemplate向mysql数据库中插入行,我在批量插入mysql数据库时遇到了问题。问题是,当插入第二行时,我在主键上得到了重复键冲突。我已经将USER_KEY放在批处理更新方法中,但在插入第二行时得到异常Duplicate entry '1' for key 'PRIMARY'。
我的方法不是带注释的@Transactional。
注意:-我需要通过代码生成主键,并将其用于更新/删除操作,因此不依赖于auto_increment。另外,jdbctemplate batch insert不会返回生成的键。
以下是我的代码
private static final String USER_KEY = "SELECT LAST_INSERT_ID() FROM USER";
jd.batchUpdate(INSERT_QUERY,
new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int count)
throws SQLException {
Long userId= jd.queryForObject(
USER_KEY, Long.class);
UserDO Userdo = userlst
.get(count);
ps.setLong(1, userId+1);
ps.setString(2, Userdo .getFirstName());
ps.setString(3, Userdo .getLastName());
ps.setString(4, Userdo .getMobile());
ps.setString(5, Userdo .getEmail());
ps.setInt(6, 0);
}
@Override
public int getBatchSize() {
return UserdoLst.size();
}
}); 感谢你有价值的回答。谢谢
发布于 2013-11-11 15:12:59
您在哪里增加了用户密钥?您将获得最后插入的id并使用相同的id。或者它正在被LAT_INSERT_ID()处理?它不应该是ps.setLong(1,userId+1)吗?
解决这个主要关键问题的一种方法,我以前用过:
例如,对于表MyTable1,当您调用proc getPrimaryKey(MyTable1)时,初始键值为0,它将返回1并更新主键表。
现在,在进行批量更新之前,您可以从这个过程中获取键,并在查询中设置它们。
希望这能有所帮助
https://stackoverflow.com/questions/19900389
复制相似问题