日期:2014-05-20  浏览次数:20702 次

这样获取MySql刚插入的ID(自增ID)有问题吗?
我在MySql的API里看到last_insert_id()可以返回上一次插入的数据的ID

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

然后我写了一个在Hibernate中用原生SQL插入数据后获取刚插入的数据的ID的方法如下:
Java code



public Integer batchSave(Session session, String insertSql, String tableName){
        Transaction tx = session.beginTransaction();
        Integer result = -1;
        String queryString = 
                "SELECT last_insert_id() FROM "+tableName+" LIMIT 1;";
        try {
            tx.begin();
            result = [color=#FF0000]session.createSQLQuery(insertSql).executeUpdate();[/color]
            session.flush();
            tx.commit();
            if(result > 0)
                return(new Integer([color=#FF0000]session.createSQLQuery(queryString).list()[/color].get(0).toString()));
        } catch (DataAccessException e) {
            e.printStackTrace();
            if (tx != null) {
                tx.rollback();
            }
        }
        return null;
    }




按照MySql的API,只要是在同一个“会话”里先Insert再查询last_insert_id(),即使有并发,得到的结果是不会错的。
但是我对Hibernate不熟,我想问的是:上面的代码能确保两次查询(红色)在同一个MySql“会话”里执行吗?

谢谢了,这个代码写出来了用起来不放心,求大侠帮我看看。

------解决方案--------------------
探讨

引用:

引用:

引用:

User usr = new User();
usr.setName("tom");
user.setAge(18);

session.save(usr);

//提交事務等操作

usr.getId();//即可取……