使用hibernate会话和MySQL,是否可以在数据库中使用原始SQL插入一行,然后在同一事务中获取生成的id(避免并发问题)?
表:
CREATE TABLE EMPLOYEE (ID int(11) NOT NULL, NAME varchar(50) NOT NULL, PRIMARY KEY (ID));
我今天在做什么:
getSession().createSQLQuery("INSERT INTO EMPLOYEE (NAME) VALUES ('JOHN')").executeUpdate();
由于
答案 0 :(得分:0)
应该可以使用LAST_INSERT_ID()
;它是根据连接确定的,所以只要你在插入后立即调用它,就没有竞争条件。
生成的ID在服务器上维护 每个连接基础。这意味着返回的值 给定客户端的函数是生成的第一个AUTO_INCREMENT值 对于影响AUTO_INCREMENT列的最新语句 客户。此值不受其他客户端的影响,即使它们也是如此 生成自己的AUTO_INCREMENT值。此行为可确保 每个客户端都可以检索自己的ID而无需担心 其他客户的活动,无需锁或 交易。