2014-03-06 75 views
0

我想使用Hibernate SQL實現與以下查詢相同的結果,也就是說,我希望從ID不等於300的表中獲取兩個隨機記錄。我正在使用Hibernate 4.1和Oracle 11g。我在Toad上運行了下面的查詢,它給出了2個隨機記錄。但是,當我嘗試運行HQL時,使用「DBMS_RANDOM.value」會出錯。使用DBMS_RANDOM.value時出現Hibernate錯誤

SELECT * FROM 
(SELECT * 
FROM table 
where ID != '300' 
AND q_ID=125 
ORDER BY DBMS_RANDOM.value 
)WHERE rownum < 3 

;

我試圖創建標準和查詢,但都給予休眠錯誤:

休眠消息:無效的路徑:「DBMS_RANDOM.RANDOM」 [從com.model.table標籤,讓tab.ID =「33092」 ORDER BY DBMS_RANDOM.RANDOM]

和我的實際Hibernate查詢是:

查詢查詢= session.createQuery( 「!從表標籤,讓tab.ID = '」 + agrmId + 「' ORDER BY DBMS_RANDOM.RANDOM」) .setMaxResults(2);

我也試過ORDER BY rand(),並給出了一個Oracle錯誤。

謝謝你的幫助。

+1

什麼是確切的錯誤信息? –

+0

請更新問題,並在那裏添加錯誤消息。 –

回答

2

我通過在休眠映射文件中添加屬性標籤解決了這個問題:

<property name="constVal" formula="DBMS_RANDOM.RANDOM" type="long"/> 

,然後,在POJO類,我加入獲取和設置方法的變量:

private long constVal; 

然後,在DAO類,我添加了以下查詢:

Criteria crit1 = session.createCriteria(table.class); 
crit1.add(Restrictions.ne("id",300)); 
crit1.add(Restrictions.eq("quesId",125)); 
crit1.addOrder(Order.asc("constVal")); 
crit1.setMaxResults(2); 

並解決它。

+0

爲了使這個工作在grails上,你必須在域類'long constVal'中創建一個新屬性,然後在同一個域類的映射部分添加這個'constVal公式:'dbms_random.value''。 – rodvlopes