[英]How can I get last inserted id using Hibernate
我想在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();
别忘了导入:
import java.math.BigInteger;
错误很清楚。 它正在返回BigInteger
而不是long
您必须将其分配给BigInteger
。 并从中获取longValue()
。
public Integer save(Smartphones i) {
int id = 0;
Session session=HibernateUtil.getSessionFactory().openSession();
Transaction trans=session.beginTransaction();
try{
session.save(i);
id=i.getId();
trans.commit();
}
catch(HibernateException he){}
return id;
}
您可以简单地使用save,它返回一个实际上是最后一个插入ID的Serializable对象。 示例代码:
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
由于uniqueResult()
的返回类型是BigInteger
而不是Long
,所以你应该这样做:
long lastId = session.createSQLQuery("SELECT LAST_INSERT_ID()")
.uniqueResult() // this returns a BigInteger
.longValue(); // this will convert it to a long value
由于您的查询SELECT LAST_INSERT_ID()
uniqueResult()
方法仅返回BigInteger。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.