getHibernateTemplate().find()只支援HQL的。
要用Sql或預存程序的話,這樣用:
final String sql="....";
return this.getHibernateTemplate().executeFind(new HibernateCallback(){
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Connection conn=session.connection();
//使用JDBC.....
return ...;
}
});
Hibernate3的話,可以用SQLQuery;
--------------------------------------------------------------------------------------
另一個例子。
回調執行查詢:
public List getInfoByPasId(int pasId) {</p><p> PlanSplitAndApplyInfo planSplitAndApplyInfo;</p><p> List lst = new ArrayList();<br />String sql = "SELECT bff.* FROM PlanSplitAndApplyInfo bff WHERE bff.pasId="+pasId;<br />try{<br />lst = this.getHibernateTemplate().find(sql1);</p><p>Connection con = this.getHibernateTemplate().getSessionFactory().openSession().connection();</p><p>Statement stat = con.createStatement();<br />ResultSet set= stat.executeQuery(sql);</p><p>while(set.next()){<br />planSplitAndApplyInfo = new PlanSplitAndApplyInfo();<br />planSplitAndApplyInfo.setAosId(Integer.parseInt(set.getString(5)));<br />planSplitAndApplyInfo.setApplyClazz(set.getString(4));<br />planSplitAndApplyInfo.setApplyField(set.getString(3));<br />planSplitAndApplyInfo.setApplyType(set.getString(2));<br />planSplitAndApplyInfo.setPasId(Integer.parseInt(set.getString(1)));<br />lst.add(planSplitAndApplyInfo);</p><p>}<br />set.close();<br />stat.close();<br />con.close();<br />}catch(DataAccessException t){<br />t.printStackTrace();<br />throw t;<br />}catch(Exception t1){<br />t1.printStackTrace();</p><p>}<br />return lst;<br />}
回調執行刪除:
/**<br /> * 根據ppfId ,刪除PlanPackageRelations。<br /> * @param ppfId<br /> */<br />public void deletePlanProjectApplyInfo(String ppfId){<br /> final String ppfIdFinal = ppfId;<br /> try {</p><p> this.getHibernateTemplate().execute(new HibernateCallback(){<br /> public Object doInHibernate(Session session) throws HibernateException, SQLException {<br /> List result = new ArrayList();<br /> String sql = "delete PlanProjectApplyInfo where ppfId = :ppfId";<br /> Query query = session.createQuery(sql).setString("ppfId",ppfIdFinal);<br /> result.add(new Integer(query.executeUpdate()));<br /> return result;<br /> }</p><p> });</p><p> }catch(DataAccessException t){<br />t.printStackTrace();<br />throw t;<br />}catch (Exception e) {<br /> e.printStackTrace();<br /> }<br />}
------------------------------------------------------------------------
使用hibernate的session,取得一個串連,然後用jdbc.
直接回調JDBC介面嘛!會spring吧?spring+hibernate回調的代碼給你:
public RowSetDynaClass findBySQL(String queryString, Object[] params) {
Session session = this.getHibernateTemplate().getSessionFactory()
.openSession();
Connection conn = session.connection();
RowSetDynaClass result = null;
try {
PreparedStatement ps = conn.prepareStatement(queryString);
for (int i = 0; i < params.length; i++) {
Object param = params[i];
ps.setObject(i + 1, param);
}
ResultSet rs = ps.executeQuery();
result = new RowSetDynaClass(rs);
rs.close();
ps.close();
session.close();
} catch (SQLException e) {
logger.error( "Method:findBySQL(String queryString, Object[] params) ", e);
}
return result;
}
RowSetDynaClass是org.apache.commons.beanutils下的一個類,自己從網上下就是了