下面给出的代码总是为最后一个插入ID返回零。你能解释一下这段代码有什么问题吗?
JdbcTemplate insert = new JdbcTemplate(dataSource);
insert.update("INSERT INTO item (price, item_category) VALUES(?,?)",
new Object[] { beverage.getPrice(), beverage.getItemCategory() });
int id = insert.queryForInt( "SELECT last_insert_id()" );
System.out.println(id);
return insert.update("INSERT INTO beverage (id, name, quantity,size) VALUES(?,?,?,?)", new Object[] { id,beverage.getName(), beverage.getQuantity(),beverage.getSize() });
答案 0 :(得分:4)
上面的整个代码必须包含在一个事务中。否则JdbcTemplate
可以为池中的所有语句使用不同的连接,last_insert_id()
与事务绑定。
使用@Transactional
或在TransactionTemplate
内包装JDBC调用。