使用hibernate的createSQLQuery方法時,寫sql語句,注意的地方
阿新 • • 發佈:2019-02-03
下面的sql
SELECT h.APPLY_RESOURCE_ID `hostId`, h.IP_ADDRESS `ip`, h.HOST_NANE `hostName`, h.MONITOR_FLG `monitorFlag`, s.CPUTOP `cpuTop`, s.PCPUFREE `pCpuFree`, s.MEMORYTOP `memoryTop`, s.PMEMORYFREE `pMemoryFree`, s.CPUMEMORY `cpuMemory`, r.CPU_CORE_COUNT `core`, r.RAM_SIZE `memory` FROM T_CC_APPLYED_HOSTINFO h LEFT JOIN T_VM_SURVERY_INFO s ON h.APPLY_RESOURCE_ID = s.VMID AND s.DATE = '2015-02-08' JOIN T_CC_APPLYED_HOST_RESOURCE r ON h.APPLY_RESOURCE_ID = r.APPLY_RESOURCE_ID WHERE h.ENABLE_FLG = 1
當使用下面的方法去執行的話,會出現異常
public List findBySql(final String queryString, final Object[] values, final int firstResult, final int maxResults) { return getHibernateTemplate().executeFind(new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query query = null; if (isIsupper()) { query = session.createSQLQuery(queryString.toUpperCase() .replace("%Y-%M-%D %H:%I:%S", "%Y-%m-%d %H:%i:%s")); logger.info("querystring is :" + queryString.toUpperCase()); } else { query = session.createSQLQuery(queryString); //logger.info("querystring is :" + queryString); } if (-1 != firstResult) { query.setFirstResult(firstResult); } if (-1 != maxResults) { query.setMaxResults(maxResults); } if (null != values) { for (int i = 0; i < values.length; i++) { query.setParameter(i, values[i]); } } return query.list(); } }); }
因為雖然使用sql構建createSql,但是sql中不能使用別名,所以出現異常,