我想使用Hibernate SQL获得与下面查询相同的结果,即,我想从ID不等于300的表中获取两个随机记录。我使用的是Hibernate 4.1和Oracle 11g。我在Toad上运行了以下查询,它提供了2个随机记录。但是,当我尝试运行HQL时,使用“DBMS_RANDOM.value”时会出错。
SELECT * FROM
( SELECT *
FROM table
where ID != '300'
AND q_ID=125
ORDER BY DBMS_RANDOM.value
)WHERE rownum < 3
我尝试创建条件和查询,但都给出了Hibernate错误:
Hibernate消息:无效路径:'DBMS_RANDOM.RANDOM'[来自com.model.table选项卡,其中tab.ID!='33092'ORDER BY DBMS_RANDOM.RANDOM]
我的实际hibernate查询是:
查询query = session.createQuery(“from table tab where tab.ID!='”+ agrmId +“'ORDER BY DBMS_RANDOM.RANDOM”)。setMaxResults(2);
我也尝试过ORDER BY rand(),这会产生Oracle错误。
感谢您的帮助。
答案 0 :(得分:2)
我通过在hibernate映射文件中添加一个属性标记解决了这个问题:
<property name="constVal" formula="DBMS_RANDOM.RANDOM" type="long"/>
然后,在POJO类中,我添加了一个带有getter和setter方法的变量:
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);
并解决了它。