1. 程式人生 > >Hibernate原生SQL查詢

Hibernate原生SQL查詢

Hibernate除了支援HQL查詢外,還支援原生SQL查詢。
對原生SQL查詢執行的控制是通過SQLQuery介面進行的,通過執行Session.createSQLQuery()獲取這個介面。該介面是Query介面的子介面。
將createQuery改成createSQLQuery方法

Dao層方法:

@SuppressWarnings("unchecked") @Transactional (propagation =    Propagation.REQUIRED,readOnly=true)
    public List findAllBySql(String sql){
        Session session=
getSession(); List list=session.createSQLQuery(sql). addScalar("id",StandardBasicTypes.INTEGER). addScalar("uuid",StandardBasicTypes.STRING). list(); return list; }

測試類:

@Test
    public void testHibernateSql() {
        AppBaseService service = (AppBaseService) cxt
                .getBean
("appBaseService"); String sql = "select id,uuid from app_basic"; List list = service.findAllBySql(sql); for (Iterator iterator = list.iterator(); iterator.hasNext();) { // 每個集合元素都是一個數組,陣列元素是id,uuid兩列值 Object[] objects = (Object[]) iterator.next(); System.out
.println("id=" + objects[0]); System.out.println("uuid=" + objects[1]); System.out.println("----------------------------"); } }

這樣會報錯,配置檔案裡面配置的預設的資料庫是device_data,而app_basic這個表是app_data資料庫裡面的。
報錯提示如下:找不到該表
這裡寫圖片描述

經過測試,只需要在sql語句中指定對應的資料庫即可
即將sql語句修改成: select id ,uuid from app_data.app_basic;