1

我使用以下代码在休眠(SQLQuery)上运行本机 sql 查询已被弃用。

private static int executeUpdate(String sql) {
    int result = 0;
    Session session = HibernateSessionFactory.getSession();
    org.hibernate.Transaction tr = session.beginTransaction();
    NativeQuery nativeQuery = session.createNativeQuery(sql);
    int executeUpdate = nativeQuery.executeUpdate();
    tr.commit();
    return executeUpdate;
}

一切正常,但我希望同样的方法也返回最后插入元素的 id,我希望这种方式与表无关。

[[编辑]]

一种方法是传递一个本机查询,returning id 然后使用以下代码:

private static int executeUpdate(String sql) {
        int result = 0;
        List<HashMap<String, Object>> ret = new ArrayList<HashMap<String, Object>>();
        Session session = HibernateSessionFactory.getSession();
        org.hibernate.Transaction tr = session.beginTransaction();
        NativeQuery nativeQuery = session.createNativeQuery(sql);
        ret = nativeQuery.list();
        tr.commit();
        return Integer.parseInt(ret.get(0).get("id").toString());
    }

能不能有别的办法?

4

1 回答 1

0

getSingleResult()在您的示例中,您可以做到这一点

private static int executeUpdate(String sql) {
    int result = 0;
    Session session = HibernateSessionFactory.getSession();
    org.hibernate.Transaction tr = session.beginTransaction();
    NativeQuery nativeQuery = session.createNativeQuery(sql);

    //here I'm assuming you are getting a BigInteger as result, change accordingly
    BigInteger executeUpdate = (BigInteger) nativeQuery.getSingleResult(); 
    tr.commit();
    return executeUpdate;
}

即使 javadoc 说它getSingleResult()用于SELECT,看起来对我来说仍然有效。

希望这可以帮助

于 2018-07-25T08:40:44.103 回答