这样获取MySql刚插入的ID(自增ID)有有关问题吗
这样获取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的方法如下:
按照MySql的API,只要是在同一个“会话”里先Insert再查询last_insert_id(),即使有并发,得到的结果是不会错的。
但是我对Hibernate不熟,我想问的是:上面的代码能确保两次查询(红色)在同一个MySql“会话”里执行吗?
谢谢了,这个代码写出来了用起来不放心,求大侠帮我看看。
------解决方案--------------------
我在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“会话”里执行吗?
谢谢了,这个代码写出来了用起来不放心,求大侠帮我看看。
------解决方案--------------------