繁体   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