簡體   English   中英

MySQL last_insert_id()在正確的事務中返回0

[英]MySQL last_insert_id( ) returns 0 within the proper transaction

我有一個春豆:

  • 使用JdbcTemplate將行插入到MySQL 5.6.12表中
  • 使用MySQL last_insert_id()函數檢索插入的行的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序列。 .update( PreparedStatementCreator, KeyHolder )和... keyHolder.getKey( ).intValue( )工作在兩種環境很好 ...

如果有人可以闡明我的意思,我真的不明白這是什么問題...

軟件堆棧,以防萬一:spring-jdbc-3.2.3.RELEASE,bonecp-0.7.1.RELEASE,mysql-connector-java-5.1.25。 兩台機器上都裝有Java 7。

也許嘗試使用:mysql_insert_id()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM