MySQL last_insert_id()在正确的事务中返回0

时间:2013-08-30 10:03:58

标签: java mysql spring jdbctemplate

我有一个Spring bean:

  • 使用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,始终

我花了几个小时检查所有内容,我可以说明交易工作正常,插入正常等等。在将所有内容扔出窗外之前,我用{{1}替换.update/.query序列并且...... .update( PreparedStatementCreator, KeyHolder )在两种环境中都精细 ......

我无法真正理解问题是什么,如果有人可以解释一下......

软件堆栈,以防万一:spring-jdbc-3.2.3.RELEASE,bonecp-0.7.1.RELEASE,mysql-connector-java-5.1.25。两台机器上的Java 7。

1 个答案:

答案 0 :(得分:0)

也许尝试使用:     mysql_insert_id()