我不建议使用以下代码在休眠(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());
}
还有其他办法吗?
答案 0 :(得分: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
,对于我来说还是可以正常工作。
希望这会有所帮助