Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用Hibernate获取上次插入的id_Java_Mysql_Hibernate_Struts2 - Fatal编程技术网

Java 如何使用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

我想在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.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