如何使用Hibernate获取最后插入的id

时间:2014-02-17 12:23:02

标签: 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 = ((BigInteger) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult()).longValue();

不要忘记导入:

  

import java.math.BigInteger;

4 个答案:

答案 0 :(得分:12)

错误非常清楚。它正在返回BigInteger而不是long

您必须将其指定给BigInteger。从中获取longValue()

答案 1 :(得分:4)

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;
}

答案 2 :(得分:3)

您可以简单地使用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

答案 3 :(得分:0)

由于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

由于您的查询uniqueResult(),方法SELECT LAST_INSERT_ID()仅返回BigInteger。