2012-01-07 18 views
0

我們使用Grails,Groovy中使用Hibernate的,我有這樣一個SQL查詢我的Grails控制器問題與參數化的SQL轉換爲HQL

String markerCalcQuery = 
    "select sum(trans_cnt) as t_count, location from map2_data where "+ 
    "fdate between (:datefrom) and (:dateto) "+ 
    "and res_id=:res_id "+ 
    "group by location ;" 

    res_row=gurculsql.rows(markerCalcQuery,[res_id:res_id,datefrom:format_dateprevious,dateto:format_datenow]); 

如何改變這種查詢HQL,我不有一個域類map2_data,但想知道是否需要創建它來將此查詢轉換爲HQL,還是可以在不這樣做的情況下轉換它(應該使用基於gorm的實現)?

我有很多查詢現在寫入MySQL,我需要將它們轉換爲HQL。

我現在已經創建了域類map2_data。因此,如何將上面的查詢變化(如何確定的功能...出findallby,個createCriteria等)

問候,

Priyank

+0

如果map2_data表未映射到域,您如何在t_count和位置等字段上執行操作(包括讀取和寫入操作)? – 2012-01-07 14:35:02

+0

這些是彙總表我有插入腳本從其他表中填充這些表中的數據,如tansaction,用戶,資源等。 – 2012-01-07 21:30:15

+0

如果您打算將所有SQL查詢轉換爲hql查詢,您將不得不創建一個實體映射到您的map2_data表。否則,沒有其他方法(通過hql)插入/更新/讀取此表中的記錄。 – 2012-01-08 13:56:25

回答

1

HQL適用於Hibernate的實體。如果您沒有實體來映射您的表,那麼您無法在此表上使用HQL。這就是ORM的原理:使用對象來表示表。

+0

我的主要目標是使查詢一般化,以便它們可以與MySQL,Oracle,MSSQL和其他供應商(如Hadoop等)一起工作。所以,我需要進行查詢一概而論。我該如何去做這些..? – 2012-01-07 22:18:57

+0

我不確定你在這裏的意思。如果您選擇Hibernate作爲以與數據庫無關的方式訪問數據庫的方式,請對此表執行相同操作:將其映射爲實體,然後將SQL查詢轉換爲HQL。如果你不想使用Hibernate訪問表,那麼使用一個DAOFactory,它將返回一個包含MySQL查詢的MySQLDAO,一個包含Hadoop查詢的HadoopDAO等,具體取決於應用程序的配置。 – 2012-01-07 22:23:23