Java 如何使用Hibernate获取上次插入的id
我想在Hibernate中获取最后一个插入值的id 搜索后:Java 如何使用Hibernate获取上次插入的id,java,mysql,hibernate,struts2,Java,Mysql,Hibernate,Struts2,我想在Hibernate中获取最后一个插入值的id 搜索后: Long lastId = ((Long) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue(); 但以下代码给出了此错误: java.lang.ClassCastException:java.math.BigInteger不能转换为java.lang.Long 请分享你的想法 解决方案 Long lastId = ((BigInt
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.biginger
错误很明显。它正在返回,而且不长
您必须将其分配给一个。然后从中获取。由于
uniqueResult()
的返回类型是biginger
而不是Long
,因此您应该这样做:
long lastId = session.createSQLQuery("SELECT LAST_INSERT_ID()")
.uniqueResult() // this returns a BigInteger
.longValue(); // this will convert it to a long value
方法
uniqueResult()。
示例代码:
Session session=this.getSessionFactory().getCurrentSession();
int result = -1;
try {
Serializable ser = session.save(paper);
if (ser != null) {
result = (Integer) ser;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
测试运行:
int result = paperService.save(paper);
System.out.println("The id of the paper you just added is: "+result);
以下是输出:
The id of the paper you just added is: 3032
@莫希特班萨里,不客气。请不要用答案编辑您的问题。标出正确答案。显然是的。但是根据stackoverflow规则,你不能在5分钟内接受答案。所以就等着吧。介意分享一下你打算用这个ID做什么吗?一旦获取lastID,它就已经过时;任何其他系统用户/线程都可以在lastId变量在作用域内的时间范围内对其进行更新。我必须将该id作为外键id存储到另一个表中。对于这种情况,是否有更好的解决方案?是:正确使用JPA。插入实体时,将在持久化该实体后在对象实例中设置ID。从对象本身获取ID以确保获得正确的ID。这是用于审核还是其他目的?我假设是JPA,但如果您直接使用Hibernate API,情况也是如此。@ALL:使用此选项可以非常轻松地获取上次插入的ID
The id of the paper you just added is: 3032