我正在寻找一种方法,该方法是通过“ createNativeQuery”执行的插入操作中检索上次生成的键/ id的方式,类似于PreparedStatement中的“ getGeneratedKeys”。
如我在第一段中所写,我知道可以使用实际上有效的PreparedStatement,并且我们在一些不同的情况下使用它。
我也知道我可以直接选择数据库并调用“ LAST_INSERT_ID”或“ @@ Identity”,它们也可以工作,但这是我要避免的方法。现在,我一直在使用向DB中插入行,然后调用简单的“ LAST_INSERT_ID()”并检索ID。
我想避免这种情况,因为它在我开始测试ProxySQL之前一直有效,我猜想它对连接/会话做了一些工作,当我调用LAST_INSERT时,我只会得到零值(但是当我对Prepared语句和getGeneratedKeys尝试相同时) , 有用)
有许多类似this的类似堆栈主题,但是我没有找到一个答案。
我一直在使用getResultList和getLastResult Query方法,但是没有一种方法可以成功检索上一次生成的ID。
最佳答案
使用JPA,ID仅在刷新时生成。因此,如果您需要ID,请调用flush()来获取ID:
Entity en = new Entity();
en.setName("My Entity name");
em.persist(en);
em.flush();
System.out.println(en.getId());