spring jdbctemplate为last_insert_id()返回0

时间:2012-09-02 14:57:24

标签: java spring

下面给出的代码总是为最后一个插入ID返回零。你能解释一下这段代码有什么问题吗?

JdbcTemplate insert = new JdbcTemplate(dataSource);

        insert.update("INSERT INTO item (price, item_category) VALUES(?,?)",
            new Object[] { beverage.getPrice(), beverage.getItemCategory() });
        int id = insert.queryForInt( "SELECT last_insert_id()" );
        System.out.println(id);
        return insert.update("INSERT INTO beverage (id, name, quantity,size) VALUES(?,?,?,?)", new Object[] { id,beverage.getName(), beverage.getQuantity(),beverage.getSize() });

1 个答案:

答案 0 :(得分:4)

上面的整个代码必须包含在一个事务中。否则JdbcTemplate可以为池中的所有语句使用不同的连接,last_insert_id()与事务绑定。

使用@Transactional或在TransactionTemplate内包装JDBC调用。