【发布时间】:2014-02-17 12:23:01
【问题描述】:
我想在 Hibernate 中获取最后插入的值的 id。
搜索后:
Long lastId = ((Long) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue();
但是下面的代码给了我这个错误:
java.lang.ClassCastException: java.math.BigInteger 无法转换为 java.lang.Long
请分享你的想法!
解决方案
Long lastId = ((BigInteger) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue();
别忘了导入:
导入 java.math.BigInteger;
【问题讨论】:
-
介意分享一下你打算用这个ID做什么?一旦您获取 lastID,它就已经过时了;任何其他系统用户/线程都可以在您的 lastId 变量在范围内的时间范围内对其进行更新。
-
我必须将该 id 作为外键 id 存储到另一个表中。这种情况有没有更好的解决办法?
-
是:正确使用 JPA。当您插入实体时,ID 将在持久化后在对象实例中设置。从对象本身获取 ID 以确保您获得正确的 ID。这是出于审计目的还是什么?
-
呃,我假设是 JPA,但如果您直接使用 Hibernate API,也是如此。
-
@ALL: 使用这个stackoverflow.com/questions/25561681/…很容易获得最后插入的 ID
标签: java mysql hibernate struts2