2

私は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 );

        ...

    }
}

DB は Amazon RDS インスタンスです。Windows 開発ボックスから指定されたコードを実行すると、すべて問題ありません。Ubuntu EC2 インスタンスに同じ接続文字列、プール構成などを使用して同じアプリをデプロイすると、常にlast_insert_id( )0 が返されます。

私はすべてをチェックするのに何時間も費やしましたが、トランザクションが適切に機能していること、挿入がうまくいっていることなどを述べることができ.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。

4

1 に答える 1