Hibernate会话 - 如何使用原始sql插入并获取生成的id?

时间:2015-06-24 05:00:39

标签: java mysql hibernate

使用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();

由于

1 个答案:

答案 0 :(得分:0)

应该可以使用LAST_INSERT_ID();它是根据连接确定的,所以只要你在插入后立即调用它,就没有竞争条件。

  

生成的ID在服务器上维护   每个连接基础。这意味着返回的值   给定客户端的函数是生成的第一个AUTO_INCREMENT值   对于影响AUTO_INCREMENT列的最新语句   客户。此值不受其他客户端的影响,即使它们也是如此   生成自己的AUTO_INCREMENT值。此行为可确保   每个客户端都可以检索自己的ID而无需担心   其他客户的活动,无需锁或   交易。

Source