Java 获取hibernate中实体的最后一个id

Java 获取hibernate中实体的最后一个id,java,hibernate,postgresql,lastinsertid,Java,Hibernate,Postgresql,Lastinsertid,我需要一种方法来获取数据库中实体的最后一个id,比如说 产品实体: 我尝试过这个,但它不起作用: public int lastInsertedId() { try { if (!session.isOpen()) session = DatabaseUtil.getSessionFactory().openSession(); session.beginTransaction();

我需要一种方法来获取数据库中实体的最后一个id,比如说

产品实体:

我尝试过这个,但它不起作用:

 public int lastInsertedId() {
        try {
            if (!session.isOpen())
                session = DatabaseUtil.getSessionFactory().openSession();
            session.beginTransaction();
            Query query = session.createSQLQuery("select last_value from purchase_idpurchase_seq ");

            int lastid = query.getFirstResult();

            session.getTransaction().commit();
            session.close();
            return lastid;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }


    }

尝试使用类似以下内容:

   String hql = "from purchase_idpurchase_seq";
   Query query = session.createQuery(hql);
   List<purchase_idpurchase_seq> results = query.list();
我想您有一个实体
purchase\u idpurchase\u seq


试着看看这个

在谷歌搜索了一下之后,我得到了解决方案:

 public int lastInsertedId() {
        try {
            if (!session.isOpen())
                session = DatabaseUtil.getSessionFactory().openSession();
            session.beginTransaction();
            Criteria c = session.createCriteria(Purchase.class);
            c.addOrder(Order.desc("id"));
            c.setMaxResults(1);
            int id = (int) ((Purchase) c.uniqueResult()).getIdPurchase();
            session.getTransaction().commit();
            session.close();
            return id;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }


    }

你在Postgres手册的哪里找到了这种语法?当我在postgresql中执行这个查询时:从purchase\u idpurchase\u seq中选择最后一个值,我会得到一个结果,但我不知道如何在hibernateNo中实现这一点,我不使用特定值它不工作到底意味着什么?它抛出了一个PostgreSQL错误?还是其他java例外?或者给零,或者其他错误的值?它现在对我有效。purchase_idpurchase_seq是数据库中的顺序,purchase是entity@abdouamer请参阅上面的链接,这很有帮助。您必须使用
currval()
lastval()
(我在第一条评论中已发布的链接)来获取最近生成的序列值。如果有多个事务正在修改数据库,则代码将无法正常工作。另外:我非常确定Hibernate应该能够在本机上做到这一点。Hibernate没有“SequenceGenerator”注释吗
 public int lastInsertedId() {
        try {
            if (!session.isOpen())
                session = DatabaseUtil.getSessionFactory().openSession();
            session.beginTransaction();
            Criteria c = session.createCriteria(Purchase.class);
            c.addOrder(Order.desc("id"));
            c.setMaxResults(1);
            int id = (int) ((Purchase) c.uniqueResult()).getIdPurchase();
            session.getTransaction().commit();
            session.close();
            return id;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }


    }