繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM