我有一個Spring bean內返回0的是:MySQL的LAST_INSERT_ID()中的適當的事務
- 將行插入使用的JdbcTemplate
- 一個MySQL 5.6.12表中檢索使用MySQL插入的行的ID LAST_INSERT_ID
ID列被定義爲INT(10) UN AI PK
()函數:
@Repository @Transactional
public class UserDao
{
@Autowired JdbcTemplate jdbcTemplate;
public User create(User u) {
String sql = "insert ...";
Object[] args = new Object[] { ... };
int mod = jdbcTemplate.update(sql, args);
int key = jdbcTemplate.queryForObject("select last_insert_id()", Integer.class);
...
}
}
該數據庫是Amazon RDS實例。當我從我的Windows開發框執行給定代碼時,一切都沒問題。當我在Ubuntu EC2實例上部署相同的應用程序,具有相同的連接字符串,池配置等時,last_insert_id()
返回0,總是。
我花了幾個小時檢查一切,我可以說交易正常,插入很好等等等等。在折騰所有窗口之前,我用.update(PreparedStatementCreator, KeyHolder)
替換.update/.query
序列,並且... keyHolder.getKey().intValue()
工作在兩種環境精細 ...
我實在無法理解什麼是問題,如果有人可以提供一些線索......
軟件堆棧,以防萬一:彈簧jdbc-3.2.3.RELEASE,bonecp-0.7.1.RELEASE,mysql-connector-java-5.1.25。兩臺機器上的Java 7。
嗯..這可能是愚蠢的建議,但我最近發現一個bug在MySQL所以現在我兩次檢查一切。雖然函數名稱在MySQL中不區分大小寫,但您可以說在Windows上沒有問題,並且在Ubuntu上發生。所以你可以嘗試使用LAST_INSERT_ID() - 大寫和引號之間沒有空格。 – stefan
它根本不笨!剛剛測試過,不幸的是它仍然返回0:/ – Fabio