我正在寻找一种方法,如何通过“createNativeQuery”以类似于PreparedStatement中的“getGeneratedKeys”的方式从插入执行插入中检索最后生成的键/ ID。
正如我在第一段中所写,我知道有可能使用实际有效的PreparedStatement,我们正在将它用于某些不同的情况。 另外我知道我可以直接选择进入数据库并调用“LAST_INSERT_ID”或“@@ Identity”也可以,但这是我想要避免的方式。现在我一直在使用在DB中插入行,然后我调用简单的“LAST_INSERT_ID()”并检索id。
我想避免这种情况,因为它一直有效,直到我开始测试ProxySQL,我想,它会用连接/会话做一些事情,当我调用LAST_INSERT时,我会得到零值(但是当我尝试使用Prepared时)声明和getGeneratedKeys,它有效)
有许多类似的堆栈主题,如this,但我没有找到一个答案。
我一直在使用getResultList和getLastResult查询方法,但没有什么可以成功地检索最后生成的ID。
答案 0 :(得分:0)
使用JPA时,ID仅在刷新时生成。因此,如果您需要ID调用flush()来获取ID:
Entity en = new Entity();
en.setName("My Entity name");
em.persist(en);
em.flush();
System.out.println(en.getId());